sql引擎将使用HashJoin:
从t1.id = t2.id的table1 t1左连接table2 t2中选择*;
很好。但是如果查询是这样的:
从t1.id> t2.id上的table1 t1左连接table2 t2中选择*;
如何处理?
nestedloop连接可以工作,但是还有更好的方法吗?
答案 0 :(得分:1)
对于分布式SQL,执行非标准联接(t1.id > t2.id
)非常昂贵。如果一侧较小,则进行广播,然后在每个节点上使用排序的索引。如果双方都很大,则可以对分区一进行范围划分并建立排序索引,然后将其他行复制到可能匹配的任何范围。
通常,您具有t1.id = t2.id and t1.cost < t2.cost
之类的组合相等和不相等联接。在这种情况下,您可以执行常规的分布式哈希联接,然后保留次要项目的排序列表以执行不相等的部分。这就是Presto所做的。