/*+use_hash(t1 t2)*/加快查询速度

这样写就是显式的告诉oracle数据库你要采取什么方式来查询~ 

它在处理你的SQL时,就按照你的要求去查询~ 
不加的话,oracle自动分析SQL,尽量采取它认为最优的方式查询~
常用的,比如优化器有:
RULE(基于规则) COST(基于成本)CHOOSE(选择性)

 

use_hash(table1,table2) 指定table1,table2连接以HASH 方式连接,采用这种方式,我们不能控制table1,table2哪个表为驱动表,
优化器会根据cost自动选择驱动表,如果我们非要控制table1为驱动表,可以加上leading(table1)作为提示,或者用ordered 作为提示。
另外如果我们使用use_hash(table1)有可能优化器不会选择hash join,也就是说如果不把表名写完整,优化器可能不会强制使用hint提示,这种行为我不是很理解,不过却给了我一个提示:Hint有时候也会失效,另外也给了我一个提示,使用hint一定要将条件写完整

select /*+ leading(emp) use_hash(emp,dept)  */ ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;

posted @ 2018-07-27 20:20  i孤独行者  阅读(106)  评论(0)    收藏  举报