Oracle有三种表连接技术,即嵌套连接、合并连接和哈希连接。
1.嵌套循环联接。
嵌套将待处理的数据集分为外环(驱动数据源)和内环(驱动数据源)。外循环只执行一次(第一次),内循环执行的次数等于外循环执行的数据集数。
这种连接的优点是内存使用非常少。
如果驱动数据源是有限的,并且驱动表在连接列上有相应的索引,那么这种连接模式是高效的。
这种连接在OLTP系统中很常见。
2.排序合并联接
顾名思义,排序合并就是先对要连接的数据集进行排序,然后再进行合并。执行过程大致如下:对表A中的数据集进行排序,并将排序结果保存在工作区A中;对表B中的数据集进行排序,排序结果存储在工作区B中;最后,合并工作空间A和b中的数据。
对于这种连接方式,排序开销非常大,与排序工作区相关的内存参数有:sort_area_size和sort_area_retained_size,都在PGA中。
3.散列连接
哈希处理的两个数据集分别称为构建输入和探测输入。构建输入中的每一行记录都用于构造哈希表,探测输入中的每一行记录都探测哈希表以找出满足连接条件的记录。
较小的表作为构造的输入,较大的表作为探针的输入,这样哈希连接的效率更高。在执行计划中,较小的输入表在前面,较大的探测表在后面。
哈希只能在对等连接的情况下进行。
与哈希表工作区相关的内存参数有:hash_area_size,也在PGA中。