2012-07-22 42 views
1

我在想,爲什麼我們使用mysql的where列= ID VS其中(IDS)

where column=id 

VS

where column in (id) 

我知道第一個將只允許同時在一個單一的id列第二個將允許多個ID,但爲什麼我們不會總是用於單列搜索?

換句話說,爲什麼我們不總是使用「在(id)」中的列?

+0

基準測試!我很想知道是否有任何性能差異。 – 2012-07-22 18:51:34

+0

我想這是因爲性能的原因。想象一下:你給了一個'我想要這個ID'。引擎遍歷每一行並檢查,如果ID匹配。現在,想象一下項目列表。對於每一行,它需要遍歷列表並詢問「是否是其中之一」?即使只有其中一個,它仍然需要遍歷「one」。 – ATaylor 2012-07-22 18:52:26

+0

我實際上有一個數據庫api,它總是在其getRecord函數中使用'IN(value)' - 迄今爲止沒有任何問題。我的猜測是mysql會在某個時候將其優化爲'=' – Vatev 2012-07-22 18:54:03

回答

3

兩者基本相同,所以它們可以互換。這是個人喜好哪一個使用。

就個人而言,我會使用=當我知道我永遠不會檢查多個值。如果有機會,我會在IN後面修改查詢,以便將新值添加到列表中。

當性能不是問題,而不是IN,我有時用REGEXP,因爲它更簡潔,並需要更少的打字:

WHERE column REGEXP '^(value1|value2)$' 

WHERE column REGEXP '[[:<:]](value1|value2)[[:>:]]' 

當然不太好已知'無效'平等運算符<=>

WHERE column <=> id 

沒有等效的IN版本。