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中文網其他相關文章!