Oracle Nested Loop Join及Hash Join - 1

一, Nested Loop Join 

嵌套循环要使用小表(实际是row source)为驱动表,并不能认为表中数据量大的就一定不能做驱动表,实际上只要需要关联的数据集小就应该做驱动表。嵌套循环关注的数据量是需要连接的row source。

如果内表在关联列上没有索引,根据其他索引字段(createtime)查出的数据量很大,那么性能仍然是很差的,因为对驱动表的每一条数据都要遍历根据createtime查出的数据。

循环嵌套连接能最快速地从结果集中提取第一批数据

在执行计划中,rownum条件对应COUNT STOPKEY部分。嵌套循环有一个很大的好处,每一步不需要执行完就可以执行下一步,所以只要查出前100条满足结果的数据那么查询就可以结束

屏蔽索引
一个表上可能有很多个索引,如果不想使用某个索引可以在列上追加一个表达式,如下图,字符类型可以拼接一个空字符串,数值类型可以加零。
 
嵌套循环的使用场景总结   
    
嵌套循环是最重要的连接方式,尤其是在实时性比较高的系统中,因为这种系统的查询要求快速返回,不能访问很多的数据块,而这正是嵌套循环适用的场景。
嵌套循环的使用场景:
(1)驱动表的结果集小(应用过自己的查询条件后),选择驱动表非常重要。
(2)内表的连接列上有索引。
(3)驱动表和内表连接匹配的数据量小,即扫描内表连接列的索引的次数少。  
        
嵌套循环只适用在连接数据量小的情况,索引范围扫描如果需要扫描超过5%的数据很可能就比全表扫描的性能还差了。

请使用浏览器的分享功能分享到微信等