什么是 Merge Join
Merge Join 一般又叫做 Sort Megre Join,这是多表连接查询中常用的一种 Join 方式。具体而言,它会先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,并将这些数据与另一个排序表中的数据进行匹配。
因为 Merge Join 需要做更多的排序,所以消耗的资源也更多。通常来讲,能够使用 Merge Join 的地方,Hash Join 都可以发挥更好的性能,即 Hash Join 的效果都比 Merge Join 要好。但如果连接键已经有序,在执行 Merge Join 时则不需要再排序了,这时 Merge Join 的性能会优于 Hash Join。Merge Join 的性能优势在此时就会得到有效的体现。
LibraDB 引擎在之前版本中,仅支持 Hash Join,而在2.2410.1.0及之后的版本中,列存引擎也已支持了基于主键的 Merge Join 能力。
适用场景
Join 键为两表的主键的场景下进行等价关联(A.a=B.a)有着明显效果。
使用方法
目前仅支持通过指定 Hint 的方式使用 Merge Join,如下命令所示。
select /*+ merge_join(lineitem,customer) */ * from orders o,lineitem l where o.o_orderkey=l.l_orderkey;