Есть ли способ использовать индекс, чтобы избежать сортировки файлов, когда ИЛИ используется в запросе MySQL? - PullRequest
3 голосов
/ 11 января 2011

У меня есть следующий запрос и следующие 2 индекса, но я все еще получаю сортировку файлов.Есть ли способ оптимизировать это дальше, чтобы избежать сортировки файлов, или мне просто нужно жить с этим?

Запрос:

SELECT * FROM table WHERE row1 > '0' OR row2 = '1' ORDER BY id DESC

Индексы:

row1

row2, id

EXPLAIN output:

Использование sort_union (row1, row2_id);Используя где;Использование сортировки файлов

Ответы [ 3 ]

0 голосов
/ 26 января 2011

Да, вы можете. Просто добавьте индекс как (id, row1, row2).

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

Более того, объединение индексов sort_union () в любом случае не является ЭТОМ хорошей оптимизацией для mySQL.

0 голосов
/ 03 января 2012

Уже немного поздно для ответа, но я хочу сказать, что, используя «или», возможно, вызывает эту проблему.Вы можете попробовать использовать union с двумя разными запросами.

0 голосов
/ 11 января 2011

ORDER BY ROW2, ID или добавление индекса по ID.

...