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

nom7f22z  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(336)

如果查询如下所示,sql引擎将使用hashjoin:
选择from table1 t1 left join table2 t2 on t1.id=t2.id;
那很好。但如果查询是这样的:
从t1.id>t2.id上的table1 t1 left join table2 t2中选择

怎么处理?
nestedloop连接可以工作,但是有更好的方法吗?

5hcedyr0

5hcedyr01#

对于分布式sql,是一种直接的非相等连接( t1.id > t2.id )执行起来相当昂贵。如果一侧较小,则进行广播,然后在每个节点上使用排序索引。如果两边都很大,可以将一个区域分区并构建一个排序索引,然后将其他行复制到任何可能匹配的区域。
通常,有相等和不相等连接的组合,比如 t1.id = t2.id and t1.cost < t2.cost . 在这种情况下,您可以执行一个正态分布散列联接,然后保留一个二级项的排序列表来执行非相等部分。普雷斯托就是这么做的。

相关问题