Получение SQL для использования правильного индекса - PullRequest
4 голосов
/ 29 мая 2009

У меня есть таблица с двумя индексами, один из которых является более быстрым индексом покрытия для определенного запроса. Однако mySQL (5.1) не выбирает правильный индекс. Я посмотрел объяснение для этого запроса и провел несколько тестов скорости, и если вы нажмете клавишу, будет большая разница.

Есть ли способ проверить, как он выбирает индекс и на каких критериях он основывается?

1 Ответ

7 голосов
/ 29 мая 2009

Будет использован нужный вам индекс (в случае его использования):

SELECT  *
FROM    table FORCE INDEX (myindex)

MySQL собирает и использует статистику таблицы для оценки мощности индексов.

Хранит его в information_schema.statistics.

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

Если есть два индекса с большой мощностью, он может выбрать INDEX MERGE для них обоих.

В одном индексе может служить WHERE условие, а в другом может служить ORDER BY, MySQL, кажется, предпочитает первое

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

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