日常学习笔记,这两天复工了,实在是太忙。
第五章看了三天,终于有时间记笔记了。
一、嵌套循环(NESTED LOOPS)
嵌套循环的算法:驱动表返回一行数据,通过连接列传值给被驱动表,驱动表返回多少行,被驱动表就要被扫描多少次。(用落总的话就是驱动表多少行,被驱动表就要被干多少次)
加上HINT:FIRST_ROWS,优化器更倾向于嵌套循环。
嵌套循环的驱动表应该返回少量数据。在执行计划中,离NESTED LOOPS关键字最近的表就是驱动表.
如果执行计划走的是嵌套循环,那此时无法更改驱动表,驱动表会被固定为主表。
/*+ use_nl(t1,t2) */
表示让两个表走嵌套循环,在书写HINT的时候,如果表有别名,HINT中一定要使用别名,不然HINT不会生效;如果没有别名,就直接用表名。
判定两个表关联是否走NL应该直接看两表关联返回后的数据量,如果返回的少可以NL,如果多的话就走HASH。
一般情况下,一个小表和大表关联,可以考虑小表NL大表,然后大表的连接列走索引,如果大表有过滤条件,可以和连接列创建组合索引。
二、HASH连接(HASH JOIN)
HASH JOIN连接的算法:两表等值关联,返回大量数据,将较小的表作为驱动表。
哈希连接只支持等值连接。
执行计划中离HASH连接关键字最近的表就是驱动表