Как избежать сортировки файлов для этого запроса MySQL
Мне нужна помощь во избежании сортировки файлов для этого запроса.
SELECT id
FROM articles USE INDEX(group)
WHERE type = '4'
AND category = '161'
AND did < '10016'
AND id < '9869788'
ORDER BY id DESC
LIMIT 10
INDEX (группа) является индексом покрытия (type
, category
, did
, id
)
Потому что ORDER BY id DESC
, сортировка файлов выполняется. Есть ли способ избежать сортировки файлов для такого запроса?
2 ответа
Измените порядок столбцов индекса. Индекс бесполезен для сортировки, потому что он является четвертым столбцом и не готов к использованию как есть.
Конечно, это влияет на полезность индекса для этого WHERE, потому что вам нужен столбец неравенства перед равенством
В документах MySQL вы нарушаете слова "Вы используете ORDER BY для непоследовательных частей ключа" и "Ключ, используемый для извлечения строк, не совпадает с ключом, используемым в ORDER BY".
Изменить: согласно моей ссылке выше, вы не можете иметь индекс, который удовлетворяет как WHERE, так и ORDER BY. Они взаимоисключающие из-за 2 условий, которые я разместил выше
Еще одно предложение:
- индекс одного столбца по идентификатору
- вернуться к исходному индексу тоже
- удалить указатель
- надеюсь, что оптимизатор решит, что оба индекса могут быть использованы ("пересечение индекса")
Создайте индекс по идентификатору и введите его, он должен работать для вас. Если идентификатор уникален, вы также можете создать для него первичный ключ.
В вашем запросе используется сортировка файлов, поскольку может быть так, что оптимизатор использует первый столбец индекса, созданный вами в запросе.