MYSQL OR против IN производительности - PullRequest
161 голосов
/ 23 апреля 2009

Мне интересно, есть ли разница в производительности между следующими

SELECT ... FROM ... WHERE someFIELD IN(1,2,3,4)

SELECT ... FROM ... WHERE someFIELD between  0 AND 5

SELECT ... FROM ... WHERE someFIELD = 1 OR someFIELD = 2 OR someFIELD = 3 ... 

или MySQL оптимизирует SQL так же, как компиляторы оптимизируют код?

РЕДАКТИРОВАТЬ: изменил AND на OR по причине, указанной в комментариях.

Ответы [ 13 ]

0 голосов
/ 22 мая 2018

2018: IN быстрее. Но > = && <= </strong> даже быстрее, чем IN .

Вот мой тест .

0 голосов
/ 23 апреля 2009

Я знаю, что, пока у вас есть индекс по полю, МЕЖДУ будет использовать его, чтобы быстро найти один конец, а затем перейти к другому. Это наиболее эффективно.

Каждое ОБЪЯСНЕНИЕ, которое я видел, показывает, что "IN (...)" и "... ИЛИ ..." взаимозаменяемы и одинаково (не) эффективны Как и следовало ожидать, так как оптимизатор не может знать, содержат ли они интервал или нет. Это также эквивалентно UNION ALL SELECT для отдельных значений.

0 голосов
/ 23 апреля 2009

Из того, что я понимаю о том, как компилятор оптимизирует эти типы запросов, использование предложения IN более эффективно, чем несколько предложений OR. Если у вас есть значения, в которых можно использовать предложение BETWEEN, это еще более эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...