嵌套循环连接/排序合并连接/哈希连接
表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据。连接是通过SQL语句中FROM从句的多个表名,以及WHERE从句里定义的表之间的连接条件来实现的。如果一个SQL语句的关联表超过两个,那么连接的顺序如何呢?
ORACLE首先连接其中的两个表,产生一个结果集;然后将产生的结果集与下一个表再进行关联;继续这个过程,直到所有的表都连接完成;最后产生所需的数据。
介绍一下以下三种常用的表的连接方式:
(一)嵌套循环连接(NESTED LOOP JOIN)
(二)排序合并连接(SORT MERGE JOIN)
(三)哈希连接(HASH JOIN)。
1、嵌套循环连接(NESTED LOOP JOIN) nested loop join
嵌套循环连接的内部处理的流程:
1)Oracle优化器根据基于规则RBO或基于成本CBO的原则,选择两个表中的一个作为驱动表,并指定其为外部表。
2)Oracle优化器再将另外一个表指定为内部表。
3)Oracle从外部表中读取第一行,然后和内部表中的数据逐一进行对比,所有匹配的记录放在结果集中。
4)Oracle读取外部表中的第二行,再和内部表中的数据逐一进行对比,所有匹配的记录添加到结果集中。
5)重复上述步骤,直到外部表中的所有纪录全部处理完。
6)最后产生满足要求的结果集。