SQL 效能:UNION 與 OR 的爭議
簡單地認為用 UNION 取代 OR 語句就能提升 SQL 效能,這種說法過於簡化。然而,理解它們使用方法的細微差別,可以帶來顯著的效能提升。
理解差異
OR 執行單一查詢,並檢索符合任一條件的行。另一方面,UNION 執行兩個單獨的查詢,並將它們的結果組合起來。當 OR 涉及多個欄位時,這種差異就變得至關重要。
考慮以下假設查詢:
<code class="language-sql">select username from users where company = 'bbc' or city = 'London';</code>
如果 company 和 city 欄位都有索引,MySQL 需要選擇一個索引。這可能會導致對另一列進行全表掃描。
UNION 作為解決方案
UNION 透過分離查詢來解決這個問題:
<code class="language-sql">select username from users where company = 'bbc' union select username from users where city = 'London';</code>
每個子查詢都可以有效地利用其各自的索引,最終結果是兩個集合的並集。
排序注意事項
UNION 確實需要排序才能消除結果集中的重複項。然而,由於 UNION 關注的是較小的一組行,因此開銷通常可以忽略不計。在 WHERE 子句影響表的大部分情況下,全表掃描的成本可能會超過 UNION 的排序成本。
結論
UNION 並不能絕對優於 OR。但是,當 OR 涉及具有衝突索引的列的謂詞時,它可以優化效能。理解這些細微差別對於編寫高效的 SQL 查詢至關重要。
以上是SQL 效能:UNION 什麼時候比 OR 更好?的詳細內容。更多資訊請關注PHP中文網其他相關文章!