嵌套循环(NestedLoops )学习笔记

 
1、基本要素。
嵌套循环(NestedLoops)中有两个表,一个是驱动表(又叫外部表),一个是内部表(探查表),驱动表一般是数据量较小或被约束条件筛选后的较小的表,内部表一般是有唯一索引或有高选择性非唯一索引(重复率较低的索引,近似于唯一索引)。
2、执行过程。
嵌套循环(NestedLoops)会先选定一个驱动表(人为指定或者系统根据成本指定),然后就看后面where条件中是否存在驱动表的过滤条件,如果有且该条件在驱动表的索引中(组合索引必须是第一列才能起作用),那么就先根据索引过滤数据行,过滤完后根据rowid读取驱动表的每一行,来跟内部表进行匹配,然后根据内部表的索引读出匹配的行到结果集中,因为能够快速的返回已连接的行(匹配的行),所以嵌套循环的响应时间最快。
 
注:从oracle7开始,引入了基于成本(CBO)的优化器,并且是默认的优化器,所以在嵌套循环时,要综合考虑两个表的数据量、索引等指标。比如数据量较大的表没有索引,数据量较小的表有索引,也许系统会选择数据量较大的表作为驱动表,所以上面所说的都只具有一般性,真正在实践的时候还要具体情况具体分析。由此可见,在设计表的时候,索引的建立的选择性显得尤为重要。

你可能感兴趣的:(数据库/SQL)