Оптимизация запросов MySQL: IN () против OR - PullRequest
6 голосов
/ 26 ноября 2010

Я читал, что у MySQL есть проблема с запросами, которые используют оператор IN () - иногда индексы не могут быть использованы. Это правда, если я не использую подзапрос?

Какой подход лучше? Есть ли разница в производительности?

1

SELECT *
FORM `somewhere`
WHERE 
  `id` = 3
   OR `id` = 5
   OR `id` = 15
   OR `id` = 56
   OR `id` = 34
   OR `id` = 47

2

SELECT *
FORM `somewhere`
WHERE 
  `id` IN (3,5,15,56,34,47)

Ответы [ 2 ]

9 голосов
/ 26 ноября 2010

Второй подход лучше. MySQL может оптимизировать это.

MySQL имеет проблему с запросами, которые используют оператор IN () - иногда индексы не могут быть использованы. Это правда, если я не использую подзапрос?

Может быть проблема с IN, когда вы пишете IN(SELECT ...), но я не думаю, что есть проблема с простым списком значений.

2 голосов
/ 26 ноября 2010

Если вы действительно хотите использовать индексы, вы можете использовать UNION, подробнее здесь mysql-followup-on-union-for-query-оптимизация-запрос-профилирование

...