这里介绍一下嵌套循环 (Nested Loops 简称NL) 的连接方式。
嵌套循环,顾名思义就是将一个表为出发点,将该表全部记录逐条去遍历另外一张表的记录,符合条件的就是写入结果集。
www.2cto.com
例如:
select a.*, b *
from EMP a, DEPT b
where a.DEPTNO = b.DEPTNO;
如使用emp表为出发点,将emp表的记录都查询出来为m条,再将这m条记录的字段deptno值,逐条和dept表的所有记录的deptno字段值匹配,假如dept表有n条记录。
匹配出来的记录符合条件就写入到结果集中。
那么这样关联操作过程中,操作的记录条数就是:先是emp表的m条,接着是dept表n条,但查了m遍,总的记录数就是m+m*n。
如使用dept表为出发点,去遍历emp表,那么总的记录数就是n+n*m。
出发点不同的连接方法,需要的成本就是不一样的。CBO会去最小的那个。
这里作为出发点的表,官方术语将其称为外部表,也叫驱动表。