MySQL не использует индекс для ORDER BY - PullRequest
0 голосов
/ 28 мая 2019

У меня есть индекс на (column_1, column_2, column_3), и когда я запускаю этот запрос

SELECT * FROM table ORDER BY column_1 DESC, column_2 ASC, column_3 ASC

этот индекс не используется.

Мне нужно использовать этот индекс, поскольку существует большая разница во времени запроса, когда я использую только ORDER BY column_1 DESC (около 0,0005 секунд) и ORDER BY column_1 DESC, column_2 ASC, column_3 ASC (около 0,4 секунд).

Кроме того, этот индекс даже не используется в ORDER BY column_1 DESC.

Это EXPLAIN для ORDER BY column_1 DESC, column_2 ASC, column_3 ASC, то же самое только для ORDER BY column_1 DESC:

enter image description here

Есть ли причина, по которой индекс не используется?

1 Ответ

2 голосов
/ 28 мая 2019

Ваше определение индекса должно соответствовать порядку сортировки, который вы запрашиваете, или как минимум смешанному направлению сортировки (т. Е. DESC, ASC, ASC или ASC, DESC, DESC).Документы ORDER BY говорят:

Если запрос смешивает ASC и DESC, оптимизатор может использовать индекс по столбцам , если индекс также использует соответствующий смешанныйвосходящие и нисходящие столбцы .[...] Оптимизатор может использовать индекс для (key_part1, key_part2), если key_part1 идет по убыванию, а key_part2 - по возрастанию.Он также может использовать индекс для этих столбцов (с обратным сканированием), если key_part1 возрастает, а key_part2 убывает.

См. здесь для получения дополнительной информации.

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