SQL Выберите IN против LIKE в предложении WHERE - PullRequest
1 голос
/ 02 мая 2011

Какой из них быстрее по производительности?

SELECT field1, field2, field3, field4
FROM MyTable
WHERE field5 LIKE '%AL'

против

SELECT field1, field2, field3, field4
FROM MyTable
WHERE field5 IN ('AAL', 'IAL')

или это ничего не меняет?

Ответы [ 5 ]

6 голосов
/ 02 мая 2011

Ваш пробег может отличаться, но второй должен быть быстрее, потому что это два поиска с индексацией, а не полный просмотр индекса. Без индекса для поля 5 это не должно иметь значения (полное сканирование таблицы в обоих случаях).

4 голосов
/ 02 мая 2011

Если у вас нет покрывающего индекса (или, по крайней мере, индекса для field5), тогда оба будут требовать сканирования таблиц, поэтому будут одинаково плохими.

О запросах ... Второй -тоже самое, что WHERE field5 = 'AAL' OR field5 = 'IAL', то есть 2 точных значения для поиска (например, вероятен поиск).Символ LIKE и начальный подстановочный знак означают, что «я не знаю, сколько значений искать», поиск никогда не произойдет

Об индексах ... Если у вас есть индекс только для field5, то второй, вероятно, будетесть 2 ключевых поиска, чтобы получить остальные данные.Первый, вероятно, будет игнорировать этот индекс, потому что он имеет ведущий подстановочный знак .Так что 2-й лучше предположить, что все будет вести себя так, как я ожидал.

С индексом покрытия, тогда 2-й снова не будет искать ключ

Об аргументах поиска ... Если изменитьВ случае переменных, то план снова изменится.Запросы с константами быстрее, чем запросы с переменными, потому что с константами значения известны заранее.

Но вы пробовали это ...

0 голосов
/ 11 мая 2011

IN быстрее, чем команда LIKE ...

0 голосов
/ 02 мая 2011

как указано, зависит от вашего выбора СУБД, если вы используете MS SQL, оба оператора идентичны с точки зрения производительности

ОБНОВЛЕНИЕ: Согласно комментарию Мартин , вышеприведенное верно, когда отсутствуют индексы для field5, что было первоначальным предположением для вопроса.

0 голосов
/ 02 мая 2011

Я бы обязательно проверил на вашей платформе. Некоторые СУБД ужасны по логике IN, то есть гораздо медленнее, чем вы ожидаете. Mysql имеет эту проблему, вы не указали в своем вопросе.

...