2009-03-08 3 views
0

Скажем, у меня есть простой запрос, как это:MySQL Индексы и Заказывайте п

SELECT * FROM topics ORDER BY last_post_id DESC 

В соответствии с MySQL's Order-By Optimization Docs, следует использовать индекс на last_post_id. Но EXPLAIN ИНГ запрос говорит об обратном:

id select_type table type possible_keys key key_len ref rows Extra 
1 SIMPLE topic_info ALL NULL NULL NULL NULL 13 Using filesort 

Почему мой индекс не используются?

ответ

2

У вас действительно только 13 рядов? База данных может решить, что просто сортировка выполняется быстрее, чем через индекс.

+0

Вот что я думал. – moo

-3

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

2

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

Если у вас действительно есть только несколько записей, то индексация не даст никакой эффективной выгоды.

1

EXPLAIN сообщает только о процессе выбора, и в этом случае ожидается, что запрос должен будет исследовать все 13 строк, чтобы увидеть, соответствуют ли они предложению WHERE (которого у вас нет, поэтому это бесполезная информация!) , Он сообщает только индексы и ключи, используемые для этой цели (оценка WHERE, JOIN, HAVING). Таким образом, независимо от того, использует ли запрос индекс для сортировки или нет, EXPLAIN не расскажет вам об этом, поэтому не попадайте в его результаты.

Да, запрос использует индекс для сортировки быстро. Я заметил те же результаты от EXPLAIN (также, сообщая все строки, несмотря на сортировку по индексу и имеющую ограничение), и я сомневаюсь, что это результат небольшого количества строк в вашей таблице, а скорее ограничение мощности EXPLAIN ,

Смежные вопросы