oracle连表图解,oracle 表连接方式解析

一、表的连接

表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据。连接是通过SQL语句中FROM从句的多个表名,以及WHERE从句里定义的表之间的连接条件来实现的。如果一个SQL语句的关联表超过两个,那么连接的顺序如何呢?ORACLE首先连接其中的两个表,产生一个结果集;然后将产生的结果集与下一个表再进行关联;继续这个过程,直到所有的表都连接完成;最后产生所需的数据。下面都以两个表的连接为例:

createtableuser_info(user_namechar(10),user_idchar(10));

createtabledev_info(dev_nochar(10),user_idchar(10),dev_typechar(10));

说明和分析表的各种连接方式。

ORACLE从6的版本开始,优化器使用4种不同的表的连接方式:嵌套循环连接(NESTEDLOOPJOIN)

群集连接(CLUSTERJOIN)

排序合并连接(SORTMERGEJOIN)

笛卡尔连接(CARTESIANJOIN)

ORACLE7.3中,新增加了哈希连接(HASHJOIN)

在ORACLE8中,新增加了索引连接(INDEXJOIN)

这六种连接方式都有其独特的技术特点,在一定的条件下,可以充分发挥高效的性能。

但是也都有其局限性,如果使用不当,不仅不能提高效率,反而会严重影响系统的性能。因此,深入地探讨连接方式的内部运行机制对于性能优化是必要的。

1、嵌套循环连接

嵌套循环连接的内部处理的流程:

1)Oracle优化器根据基于规则RBO(rulebasedoptimizer)或基于成本CBO(costbasedoptimizer)的原则,选择两个表中的一个作为驱动表,并指定其为外部表。

2)Oracle优化器再将另外一个表指定为内部表。

3)Oracle从外部表中读取第一行,然后和内部表中的数据逐一进行对比,所有匹配的记录放在结果集中。

4)Oracle读取外部表中的第二行,再和内部表中的数据逐一进行对比,所有匹配的记录添加到结果集中。

5)重复上述步骤,直到外部表中的所有纪录全部处理完。

6)最后产生满足要求的结果集。

通过查询SQL语句的执行计划可以看出哪个表是外部表,哪个为内部表。

如selecta.user_name,b.dev_nofromuser_infoa,dev_infobwherea.user_id&#

你可能感兴趣的:(oracle连表图解)