我养成了将连接条件与其他附加条件分开的习惯。但是我理解逻辑执行顺序是:
- 从
- 在哪里
如果我在where
子句而不是join
子句中添加附加条件,是否会损害性能;还是这部分通常在查询优化阶段得到简化和同等处理?
以下是两个返回相同计划的简单示例查询:
USE StackOverflow2010;
-- additional filters in where clause
SELECT TOP 500 p.id
FROM dbo.Posts p
INNER JOIN dbo.Votes v ON p.id = v.PostId
WHERE
v.VoteTypeId = 2
ORDER BY p.id
;
-- all criteria in on clause
SELECT TOP 500 p.id
FROM dbo.Posts p
INNER JOIN dbo.Votes v ON p.id = v.PostId AND v.VoteTypeId = 2
ORDER BY p.id
;
我想补充一点,如果我编写更长的分析语句,通常跨越 100 多行(格式化),我会尝试尽快减少结果集,通常使用派生表并在它到达连接之前添加一个额外的地方.