Индексы MySQL и порядок по пунктам - PullRequest
0 голосов
/ 08 марта 2009

Скажем, у меня есть простой запрос, подобный этому:

SELECT * FROM topics ORDER BY last_post_id DESC

В соответствии с Документами по упорядочиванию заказов MySQL следует использовать индекс 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

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

Ответы [ 4 ]

2 голосов
/ 08 марта 2009

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

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

2 голосов
/ 08 марта 2009

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

1 голос
/ 08 марта 2009

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

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

0 голосов
/ 08 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...