Mysql

使用 OR 運算符的單個查詢與使用等於運算符的多個查詢

  • December 3, 2019

案例 1 - 在 where 子句中使用 OR 運算符的單個查詢:

select * from users where name='smith' or nick='smith' (using index_merge )

案例 2 - 在 where 子句中使用等於運算符的多個查詢:

select * from users where name='smith'; (using single index);

select * from users where nick='smith'; (using single index);

:案例 2 中是否有任何性能損失?

在這些情況下使用 UNION 是一種常見的優化(至少在您必須使用單個查詢時):

select * from users where name='smith' /* using single index */
UNION 
select * from users where nick='smith'; /* using single index */

根據我的經驗,我不喜歡依賴 index_merge (union),因為性能通常不如UNION上面的顯式技巧好。

但是每種情況可能會有所不同,因為性能可能取決於每個條件匹配的行數。


@jynus 在下面的評論中是正確的,該問題是關於為 UNION 創建的臨時表。

我還想補充一點,很難為哪種類型的查詢更快制定一般規則。這在很大程度上取決於您查詢的數據量、您使用的軟體版本、您的作業系統和調整,以及每秒同時執行的查詢數量。

回答這類問題的唯一可靠方法是在您的伺服器上針對您的數據自行測試多個解決方案。

引用自:https://dba.stackexchange.com/questions/80296