sql引擎如何处理非相等的联接查询?

时间:2018-07-13 15:07:54

标签: mysql sql presto

如果出现以下查询,

sql引擎将使用HashJoin:

  

从t1.id = t2.id的table1 t1左连接table2 t2中选择*;

很好。但是如果查询是这样的:

  

从t1.id> t2.id上的table1 t1左连接table2 t2中选择*;

如何处理?

nestedloop连接可以工作,但是还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

对于分布式SQL,执行非标准联接(t1.id > t2.id)非常昂贵。如果一侧较小,则进行广播,然后在每个节点上使用排序的索引。如果双方都很大,则可以对分区一进行范围划分并建立排序索引,然后将其他行复制到可能匹配的任何范围。

通常,您具有t1.id = t2.id and t1.cost < t2.cost之类的组合相等和不相等联接。在这种情况下,您可以执行常规的分布式哈希联接,然后保留次要项目的排序列表以执行不相等的部分。这就是Presto所做的。