1
我在想,爲什麼我們使用mysql的where列= ID VS其中(IDS)
where column=id
VS
where column in (id)
我知道第一個將只允許同時在一個單一的id列第二個將允許多個ID,但爲什麼我們不會總是用於單列搜索?
換句話說,爲什麼我們不總是使用「在(id)」中的列?
我在想,爲什麼我們使用mysql的where列= ID VS其中(IDS)
where column=id
VS
where column in (id)
我知道第一個將只允許同時在一個單一的id列第二個將允許多個ID,但爲什麼我們不會總是用於單列搜索?
換句話說,爲什麼我們不總是使用「在(id)」中的列?
兩者基本相同,所以它們可以互換。這是個人喜好哪一個使用。
就個人而言,我會使用=
當我知道我永遠不會檢查多個值。如果有機會,我會在IN
後面修改查詢,以便將新值添加到列表中。
當性能不是問題,而不是IN
,我有時用REGEXP
,因爲它更簡潔,並需要更少的打字:
WHERE column REGEXP '^(value1|value2)$'
或
WHERE column REGEXP '[[:<:]](value1|value2)[[:>:]]'
當然不太好已知'無效'平等運算符<=>
:
WHERE column <=> id
沒有等效的IN
版本。
基準測試!我很想知道是否有任何性能差異。 – 2012-07-22 18:51:34
我想這是因爲性能的原因。想象一下:你給了一個'我想要這個ID'。引擎遍歷每一行並檢查,如果ID匹配。現在,想象一下項目列表。對於每一行,它需要遍歷列表並詢問「是否是其中之一」?即使只有其中一個,它仍然需要遍歷「one」。 – ATaylor 2012-07-22 18:52:26
我實際上有一個數據庫api,它總是在其getRecord函數中使用'IN(value)' - 迄今爲止沒有任何問題。我的猜測是mysql會在某個時候將其優化爲'=' – Vatev 2012-07-22 18:54:03