JOIN 查询中的 WHERE 子句与 ON:性能影响
在 T-SQL 中使用 JOIN 查询时,通常会遇到以下选择:将过滤条件放在 WHERE 子句或 ON 子句中。虽然这两种方法可以产生相同的结果集,但需要考虑细微的性能差异。
具体来说,让我们检查以下查询:
SELECT * FROM Foo f INNER JOIN Bar b ON (b.BarId = f.BarId); WHERE b.IsApproved = 1;
相比:
SELECT * FROM Foo f INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);
两个查询返回相同的行集,但性能特征不同。
一般来说,将过滤器放在ON 子句是首选,原因如下:
但是,在某些情况下,将过滤器放在 WHERE 子句中是必要:
SELECT * FROM Foo f LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) WHERE (b.IsApproved IS NULL OR b.IsApproved = 1);
结论:
当关注性能时,请考虑放置ON 子句中的过滤条件可优化联接操作并减少结果集大小。对于外连接或可选过滤,必须使用 WHERE 子句来实现所需的过滤。
以上是JOIN 查询中的 WHERE 与 ON 子句:何时应使用 Which 以获得最佳性能?的详细内容。更多信息请关注PHP中文网其他相关文章!