TSQL-优化器如何处理未使用表的联接
SELECT table1.col1, table2.col1, table2.col2 -- etc.
FROM dbo.table1
LEFT JOIN dbo.table2
on (table1.id = table2.id)
LEFT JOIN dbo.table3
on (table1.id = table3.id)
在上面的简单示例中,很明显不需要表3,但是可能存在更复杂的情况。
问题::TSQL查询优化器是否可以确定不需要表3的JOIN?如果是这样,如果未从查询中手动删除table3,是否可能会错过针对更复杂查询的其他优化?
我将SSMS 14.017与选择@@ version = Microsoft SQL Server 2014(SP3)的基础SQL数据库一起使用
答案 0 :(得分:2)
是的,查询优化器可以跳过table3,因为它未在SELECT列表中引用,并且联接条件为LEFT OUTER JOIN
,因此不进行过滤。
相关:10 Cool SQL Optimisations That do not Depend on the Cost Model by Lukas Eder:
JOIN Elimination: An Essential Optimiser Feature for Advanced SQL Usage