加入融合?

Cra*_*aig 16 sql-server inner-join

与WHERE子句相反,在连接中进行过滤是否有任何明显的性能参数?

例如,

SELECT blah FROM TableA a
INNER JOIN TableB b
ON b.id = a.id
AND b.deleted = 0
WHERE a.field = 5
Run Code Online (Sandbox Code Playgroud)

相反

SELECT blah FROM TableA a
INNER JOIN TableB b
ON b.id = a.id
WHERE a.field = 5
  AND b.deleted = 0
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢后者,因为我觉得过滤应该在过滤部分(WHERE)中完成,但是有任何性能或其他原因要做任何一种方法吗?

bti*_*lly 28

如果查询优化器完成其工作,则内部联接的两种形式中没有任何区别(除了其他人的清晰度).

也就是说,对于左连接,连接中的条件意味着在连接之前过滤第二个表中的行.where中的条件意味着在加入后从最终结果中过滤行.这些意味着非常不同的事情

  • @Chogg 在示例中使用内连接并不一定意味着问题仅与内连接有关。 (2认同)