SQL 查詢中的篩選條件:Join 與Where 子句
在SQL 中查詢資料時,有兩種常見的應用篩選條件的方法:連接條件和Where 子句。開發人員經常糾結哪種方法更有效的問題。
問題:
哪一種 SQL 查詢執行速度較快:在連線條件上套用篩選器或在哪裡子句?
分析:
考慮兩個查詢:
查詢1(連結條件進行篩選):
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID WHERE a.ID = 1;
查詢2(依位置過濾Clause):
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID AND a.ID = 1 INNER JOIN TableB b ON x.TableBID = b.ID;
效能比較:
根據經驗,測試顯示Where子句比Join Criteria稍快。這是違反直覺的,因為人們可能期望連接標準更快地減少結果集。
邏輯一致性:
除了效能之外,還要考慮每種方法的邏輯一致性。使用Where子句可以確保即使Join被替換為Left Join,操作仍然有效。
建議方法:
基於效能和邏輯一致性,它通常建議對Where應用篩選條件子句。
範例:
考慮以下查詢:
SELECT * FROM TableA a LEFT JOIN TableXRef x ON x.TableAID = a.ID AND a.ID = 1 LEFT JOIN TableB b ON x.TableBID = b.ID;
此查詢在邏輯上是合理的,且執行效果與下列查詢相同:連接上的過濾器標準。
結論:
雖然從性能角度來看,連接標準和Where 子句的表現相似,但Where 子句在邏輯上更加一致,因此是應用首選的方法SQL 查詢中的篩選條件。
以上是用於過濾的 JOIN 與 WHERE 子句:哪個 SQL 查詢更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!