2012-07-22 3 views
1

Я задавался вопросом, почему мы используемMysql, где столбец = идентификатор против где столбец (ид)

where column=id 

против

where column in (id) 

Я знаю, что первый будет работать только один идентификатор в то время как второй позволит несколько идентификаторов, однако почему мы не всегда используем даже для одного поиска столбцов?

Другими словами, почему мы не всегда используем «where column in (id)»?

+0

Бенчмарк это! Мне было бы интересно узнать, есть ли разница в производительности. –

+0

Я предполагаю, что это из-за соображений производительности. Представьте себе: вам дается «Я хочу этот идентификатор». Двигатель проходит через каждую строку и проверяет, совпадает ли идентификатор. Теперь представьте себе то же самое для списка предметов. Для каждой строки нужно перебирать список и спрашивать: «Это один из них»? И даже если там есть только один из них, ему все равно нужно перебирать «один». – ATaylor

+0

У меня фактически есть база данных api, которая всегда использует 'IN (value)' в своей функции getRecord - до сих пор с ней не было никаких проблем. Мое предположение: mysql будет оптимизировать его до '=' в какой-то момент – Vatev

ответ

3

Эти два варианта по существу одинаковы, поэтому они взаимозаменяемы. Это личное предпочтение, которое нужно использовать.

Лично я бы использовал =, когда я знаю, что никогда не буду проверять более одного значения. Я бы использовал IN, если есть вероятность, что позже изменю запрос, чтобы добавить новые значения в список.

Когда производительность не является проблемой, а не IN, я иногда использую REGEXP как это более емким, и требует меньше печатать:

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

или

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

Конечно менее хорошо известный оператор равенства «нуль-безопасный» <=>:

WHERE column <=> id 

не имеет эквивалента версии IN.

Смежные вопросы