TSQL - 优化器如何处理与未使用表的连接

问题描述 投票:1回答:1

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与基础SQL数据库select @@ version = Microsoft SQL Server 2014(SP3)

tsql optimization sql-server-2014 ssms-2014
1个回答
3
投票

是的,查询优化器可以跳过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

© www.soinside.com 2019 - 2024. All rights reserved.