SQL优化器原理 - Join重排
这是ODPS有关SQL优化器原理的系列文章之一。我们会陆续推出SQL优化器有关优化规则和框架的其他文章。添加钉钉群“关系代数优化技术”(群号11719083)可以获取最新文章发布动态。
本文的目标是解释Join重排这个特性的基础概念和算法,如果想快速了解并在ODPS上使用这个特性,请直接跳到“总结”。
简介
Join重排是经典的SQL优化问题。考虑3个表的自然连接 A ⋈ B ⋈ C ,在不影响最终结果集的前提下,可以改变连接的顺序为下列:
A ⋈ C ⋈ BB ⋈ A ⋈ CB ⋈ C ⋈ AC ⋈ A ⋈ BC ⋈ B ⋈ A
熟悉SQL开发的读者会明白,这个顺序可能极大影响SQL执行的效率。打个比方,A,B,C的数据量各自是100条记录,如果A ⋈ C的数据量是1条记录,A ⋈ B是100条记录,显然A ⋈ B ⋈ C的效率低于A ⋈