Все работает как положено. :)
Индексы предназначены для ускорения поиска. Они делают это с помощью поиска по индексу.
В первом запросе индекс не используется, потому что вы получаете ВСЕ строки, и в этом случае использование индекса медленнее (lookup index
, get row
, lookup index
, get row
... x количество строк медленнее, чем get all rows
== сканирование таблицы)
Во втором запросе вы получаете только часть данных, и в этом случае сканирование таблицы происходит намного медленнее.
Задача оптимизатора - использовать статистику, которую СУБД хранит в индексе, для определения наилучшего плана. В первом случае индекс был рассмотрен, но планировщик (правильно) выбросил его.
EDIT
Возможно, вы захотите прочитать что-то вроде this , чтобы получить некоторые понятия и ключевые слова, касающиеся планировщика запросов mysql.