MySQL не использует индексы;используя сортировку файлов - PullRequest
6 голосов
/ 01 июля 2011

MySQL, по-видимому, не использует индексы и использует файловую сортировку по следующему запросу:

  SELECT `tweets`.* 
    FROM `tweets` 
   WHERE (`tweets`.contest_id = 159) 
ORDER BY tweet_id ASC, tweeted_at DESC LIMIT 100 OFFSET 0

У меня есть индексыtest_id, tweet_id и tweeted_at

При выполнении EXPLAIN EXTENDEDExtra возвращает «Using куда; используя filesort».Как я могу улучшить свой запрос?

1 Ответ

5 голосов
/ 01 июля 2011

Когда вы смешиваете сортировку ASC и DESC, MySQL не может использовать индексы для оптимизации оператора GROUP BY.

Кроме того, использование нескольких ключей для сортировки приведет к невозможности оптимизациизапрос с индексами.

Из документов:

http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html

В некоторых случаях MySQL не может использовать индексы для разрешения ORDER BY, хотя все еще используетиндексы для поиска строк, которые соответствуют предложению WHERE.Эти случаи включают в себя следующее:

Вы используете ORDER BY на разных клавишах:

ВЫБРАТЬ * ИЗ t1 ORDER BY key1, key2;

...

Вы смешиваете ASC и DESC:

ВЫБРАТЬ * ОТ t1 ORDER BY key_part1 DESC, key_part2 ASC;

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

...