2012-02-07 83 views
2

我有一個MySQL查詢,其中的年齡要檢查可能的可能值數組。在MySQL和IN運算符之間有任何性能差異

查詢看起來像:

select * from users where age in (15,18,20,22); 

有些時候,年齡陣也許只有一個單一的價值,說[22]。

在這種情況下,我想知道如果下面的查詢(A):

select * from users where age in (22); 

會相比,(B)是最佳的:

select * from users where age = 22; 

請讓我知道你的想法。

+2

比較查詢計劃。 – Mat 2012-02-07 14:37:18

+0

當我在我的數據庫中嘗試它時,查詢計劃看起來是相同的。 MySQL很有可能足夠聰明地弄清楚它們是一樣的。 – ceejayoz 2012-02-07 14:39:10

回答

5

一樣多,我知道IN子句內部一系列的where子句像

WHERE id = 1 OR id = 2 OR id = 3 

請糾正我,如果我錯了......

+1

我不會糾正你的。事實上,我會讓你高興。 – Mchl 2012-02-07 14:40:28

+0

事實上這是事實。 – Rahul 2012-02-07 14:45:46

0

您可以使用IN子句來取代許多OR實施條件。所以

SELECT * FROM colA = 'Value1' or colA = 'Value2' 

相同

SELECT * FROM colA IN ('Value1', 'Value2') 
1

我不相信有在MySQL IN=運營商之間的任何性能差異。

我們使用=運算符試圖比較單個元素,當我們必須比較我們使用IN子句的元素列表。

不管怎麼說,IN條款會被內部扁平化的一系列OR條件/或運算棧的...像

col1 IN('a','b','c') 

將成爲

col = 'a' OR col1 = 'b' OR col = 'c' 
1

不應該有對性能的影響使用

... Id in (22) 

對比

... Id=22 

這兩個語句的執行計劃是相同的,當IN中的列表只有一個元素時,IN語句將被轉換爲'= 22'。

相關問題