小结Oracle进行Join的常用方式

尽管我们在SQL的FROM子句可以写多个表连接的语句,但是实际上Oracle每次只能连接两个表,多个表连接被拆分成多次的两个表连接,具体如何拆分要视Oracle的执行计划而定。

常用的有三种连接方式:

一、Sort Merge Join

把两个表各自符合条件的记录取出来并进行排序,然后对两个集合按照Join的条件进行连接

二、Nested Loops

这种情况下连接的表分为外部表和内部表,外部表是处于嵌套循环外层的表,一般情况下这个表符合条件的记录应该尽可能的少。

大概的过程是对外部表符合条件的记录进行循环,在每个循环中,在内部表中查找符合Join条件的记录。

这种Join方法的好处是能够尽快返回部分结果集。

三、Hash Join

将符合条件记录较少表的记录放到内存中,按照Join条件的字段计算Hash值,然后在另外一张表中查找符合条件的记录,按照Join条件字段的Hash值与从第一个表提取到内存中的记录进行匹配。

Hash Join只适用于等值连接的情况。

更详细的介绍请参考下面的BLOG: ORACLE执行计划的一些基本概念 ,写的非常不错!

One Response

Subscribe to comments with RSS.