Как избежать сортировки файлов для этого запроса 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 условий, которые я разместил выше

Еще одно предложение:

  • индекс одного столбца по идентификатору
  • вернуться к исходному индексу тоже
  • удалить указатель
  • надеюсь, что оптимизатор решит, что оба индекса могут быть использованы ("пересечение индекса")

Создайте индекс по идентификатору и введите его, он должен работать для вас. Если идентификатор уникален, вы также можете создать для него первичный ключ.

В вашем запросе используется сортировка файлов, поскольку может быть так, что оптимизатор использует первый столбец индекса, созданный вами в запросе.

Другие вопросы по тегам