【发布时间】:2013-03-04 16:00:22
【问题描述】:
如果我有这样的查询:
SELECT
A.ID,
A.Name,
A.Type,
B.FirstName,
B.LastName,
B.DateOfBirth,
C.OfficeName
FROM A
INNER JOIN B ON A.ContactID = B.ID
INNER JOIN C ON B.OfficeID = C.ID
WHERE
A.Type = 1
什么时候应用 A.Type = 1 过滤器?是在连接之后,还是查询查找“A”,确定它是否通过过滤器,如果通过,则只连接到 B 和 C?
希望这是有道理的。谢谢。
【问题讨论】:
-
能否包含查询执行计划?这可能会回答您的问题。
-
我一直认为查询优化器会发现它并将其应用到最佳(或接近)的位置。在 SSMS 中打开“包括实际查询计划”选项运行查询,看看会发生什么。
-
它有什么改变吗?当然,只要结果是正确的。 SQL Server 将使它变得更高效。
-
@mellamokbtheWise - 这只是我很好奇的事情。我只是想知道 SQL 是否遵循任何可靠的规则。通常情况下,答案似乎是“视情况而定”。 :)
-
一本数据库系统教科书将涵盖这一点。通常,
WHERE条件应尽早处理,因为它们会减小要进一步处理的行集的大小。
标签: sql sql-server