数据仓库服务 GAUSSDB(DWS)-执行计划算子:连接算子

时间:2024-10-28 14:22:53

连接算子

连接算子对应了关系代数中的连接操作,以表 t1 join t2 为例,主要的集中连接类型如下:inner join、left join、right join、full join、semi join、 anti join,其实现方式包括Nestloop、HashJoin及MergeJoin。
表2 连接算子

算子

含义

场景

实现特点

NestLoop

嵌套循环连接,暴力连接,对每一行都扫描内表。

Inner Join, Left Outer Join, Semi Join, Anti Join

适用于被连接的数据子集较小的查询。在嵌套循环中,外表驱动内表,外表返回的每一行都要在内表中检索找到它匹配的行,因此整个查询返回的结果集不能太大(不能大于10000),要把返回子集较小的表作为外表,而且在内表的连接字段上建议要有索引。

MergeJoin

归并连接(输入有序),内外表排序,定位首尾两端,一次性连接元组。等值连接。

Inner Join, Left Outer Join, Right Outer Join, Full Outer Join, Semi Join, Anti Join

也称作“融合连接”,是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配。

因为Merge join需要做更多的排序,所以消耗的资源更多,因此通常情况下执行性能差于Hash Join。 如果源数据已经被排序过,在执行融合连接时,并不需要再排序,此时Merge Join的性能优于Hash Join。

(Sonic) HashJoin

哈希连接,内外表使用join列的hash值建立hash表,相同值的必在同一个hash桶。等值连接的连接两端必须为类型相同的等值连接,且支持hash散列。

Inner Join, Left Outer Join, Right Outer Join, Full Outer Join, Semi Join, Anti Join

哈希连接,适用于数据量大的表的连接方式。优化器使用两个表中较小的表,利用连接键在内存中建立hash表,然后扫描较大的表并探测散列,找到与散列匹配的行。Sonic和非Sonic的Hash Join的区别在于所使用hash表结构不同,不影响执行的结果集。

support.huaweicloud.com/devg-dws/dws_04_0402.html