Почему MySQL выдает записи быстрее, чем подсчитывает?

Приветствую, друзья. Заметил странное поведение MySQL: один и тот же запрос SELECT, с COUNT выполняется дольше (до 100 раз), чем без него. Хочу попросить вас помочь мне разобраться в данной ситуации.

/** Запрос 1 **/
SELECT COUNT(0)
FROM `numbers_services`
WHERE TRUE
    AND `id_service` = 1
    AND `state` = 'none'

/** Запрос 2 **/
SELECT `id_number`
FROM `numbers_services`
WHERE TRUE
    AND `id_service` = 1
    AND `state` = 'none'


Результаты выполнения запросов и их EXPLAIN
cmcO8uBkCh0.jpgZdRd3hVDu_c.jpg


Таблица InnoDB, в ней около 2 700 000 записей. Отключение кэша (SQL_NO_CACHE) никак не меняет ситуацию. Профилирование показывает что в запросе с COUNT 95-99% времени занимает Sending Data.
  • Вопрос задан
  • 578 просмотров
Решения вопроса 2
@neol
Первый запрос пробегает всю таблицу, чтобы посчитать count.
Второй - находит 25 строк, удовлетворяющих условию, и останавливается.

Если из первого запроса убрать LIMIT (который автоматически добавляет phpmyadmin), то время выполнения будет вполне нормальным.
Ответ написан
Отображение строк 0 - 24

То есть фактически там limit 0, 25 и просматриваются не все строки. При count - все.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gibson_dev
@gibson_dev
Все очень просто - INNODB в отличии от MyISAM не хранить подсчитанное количество записей а каждый раз их все проходит чтобы подсчитать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы