连接中附加"on"条件的顺序是否重要?



我正在加入2个表,并希望在多个条件下加入,但我想知道条件的顺序是否重要。在下面的例子:

SELECT * 
FROM Table_A A 
LEFT JOIN Table_B B
ON A.feature1 = B.Feature1
AND A.feature2 = B.Feature2
AND A.feature3 = B.Feature3
AND A.feature4 = B.Feature4

如果'A.featureX = B.FeatureX'的顺序不同,上面的查询结果是否相同?提前感谢!

我试着改变顺序,希望看到一些不同,但至少我正在使用的表,我没有看到任何变化。

理想情况下,连接条件的顺序和谓词的顺序是不相关的。

在实践中,在连接两个表的绝大多数情况下,这可能是正确的。但是,连接的表越多,优化器生成查询计划的选项越多,这种情况就越不正确。优化器必须在几毫秒内生成一个计划,但是可能的计划数量随着所涉及的表的数量(以及潜在索引的数量)呈指数增长。这意味着优化器必须使用各种启发式方法来确定哪些计划树需要修剪,哪些计划树需要探索。在某些时候,由于首先考虑某个连接条件或谓词而首先找到的计划树将比后面考虑的另一个计划树得到更深入的研究。如果您正在构建一个连接17个表的大型查询,并且有一堆可以由不同索引满足的谓词,那么很有可能更改表的顺序或谓词的顺序或连接条件的顺序将产生不同的查询计划。

最新更新