如果有这样的查询,sql引擎将使用HashJoin:
从table1 t1中选择*,在t1.id =t2.id上左加入table2 t2;
那就好了。但是,如果查询是这样的:
从table1 t1中选择*,在t1.id >t2.id上左加入table2 t2;
怎么处理这个?
nestedloop连接可以工作,但是还有更好的方法吗?
发布于 2018-07-13 22:46:21
对于分布式SQL,直接执行非qual (t1.id > t2.id)是非常昂贵的。如果一方较小,则执行广播,然后在每个节点上使用排序索引。如果两边都很大,则可以对分区进行范围划分,并构建排序索引,然后将其他行复制到可能匹配的任何范围。
通常,您有一个组合相等和非相等连接,如t1.id = t2.id and t1.cost < t2.cost。在这种情况下,您可以执行一个普通的分布式散列连接,然后保留一个排序的次要项列表来执行非相等部分。普雷斯托就是这么做的。
https://stackoverflow.com/questions/51328118
复制相似问题