Я предполагаю, что вы хотите знать разницу в производительности между следующими:
WHERE foo IN ('a', 'b', 'c')
WHERE foo = 'a' OR foo = 'b' OR foo = 'c'
В соответствии с руководством для MySQL , если значения постоянны, IN
сортирует список, а затемиспользует бинарный поиск.Я полагаю, что OR
оценивает их один за другим в произвольном порядке.Так что IN
быстрее в некоторых обстоятельствах.
Лучший способ узнать, это профилировать обе базы данных с вашими конкретными данными, чтобы увидеть, что быстрее.
Я пробовал оба на MySQL с 1000000 строками.Когда столбец проиндексирован, нет заметной разницы в производительности - оба практически мгновенные.Когда столбец не проиндексирован, я получил следующие результаты:
SELECT COUNT(*) FROM t_inner WHERE val IN (1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000);
1 row fetched in 0.0032 (1.2679 seconds)
SELECT COUNT(*) FROM t_inner WHERE val = 1000 OR val = 2000 OR val = 3000 OR val = 4000 OR val = 5000 OR val = 6000 OR val = 7000 OR val = 8000 OR val = 9000;
1 row fetched in 0.0026 (1.7385 seconds)
Так что в этом случае метод, использующий OR, примерно на 30% медленнее.Добавление большего количества терминов увеличивает разницу.Результаты могут отличаться для других баз данных и других данных.