Как избежать сортировки файлов для этого запроса MySQL - PullRequest
3 голосов
/ 12 июля 2011

Мне нужна помощь во избежании сортировки файлов для этого запроса.

  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

ИНДЕКС (группа) - это индекс покрытия (type, category, did, id)

Из-за ORDER BY id DESC выполняется сортировка файлов. Есть ли способ избежать сортировки файлов для такого запроса?

Ответы [ 2 ]

4 голосов
/ 12 июля 2011

Изменение порядка столбцов индекса.Индекс бесполезен для сортировки, потому что он является четвертым столбцом и не готов к использованию как есть.

Конечно, это влияет на полезность индекса для этого WHERE, потому что вам нуженСтолбец неравенства перед равенством один

В Документах MySQL вы разбиваете «Вы используете ORDER BY для непоследовательных частей ключа» и «Ключ, используемый для выборки строк, не совпадаеткак тот, который используется в ORDER BY "

Edit: согласно моей ссылке выше, у вас не может быть индекса, который удовлетворял бы как WHERE, так и ORDER BY.Они являются взаимоисключающими из-за двух условий, которые я разместил выше

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

  • индекс с одним столбцом для идентификатора
  • также возвращает к исходному индексу
  • удалить указатель индекса
  • надеемся, что оптимизатор решит, что оба индекса могут использоваться («пересечение индекса»)
0 голосов
/ 12 июля 2011

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

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

...