MySQl, почему совершенно неправильный индекс будет использоваться? - PullRequest
1 голос
/ 09 марта 2011

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

Это не просто небольшая разница, это индекс, который совсем не подходит.

Это мой запрос

SELECT count(Pads.PadID) AS CountOfPadID FROM Pads WHERE ((
RemoveMeDate='2001-01-01 00:00:00') AND (catid between 0 and 11)) 
ORDER BY VersionAddDate DESC;

Объяснение тестового сервера enter image description here

Живой сервер объяснить enter image description here

Вот индексы на работающем сервере, вы можете видеть, что индекс Cats никак не связан с полями, используемыми в запросе. enter image description here

Я пытался USE INDEX (sitempacats), который работает, но я просто озадачен, почему он это сделал?

1 Ответ

2 голосов
/ 09 марта 2011

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

...