в myisam количество строк хранится отдельно, в innodb надо посчитать сколько записей в индексе. с учетом того, что первичный индекс — кластерный, это может быть очень не быстрым делом.
одно дело взять данные из метадаты таблицы, которые _всегда_ в памяти, другое — обращаться к дереву индексов, и смотреть сколько там элементов.
первое — либо быстрее, либо так же по скорости.
SELECT SQL_CALC_FOUND_ROWS… FROM дальше_обычный_запрос
Правда это не для всей таблицы, а для конкретного запроса.
Узнавать количество для всей таблицы как-то не было надобности.
SELECT COUNT(*) FROM `таблица`
starting 0.000007
checking query cache for query 0.000005
checking privileges on cached 0.000003
sending cached result to clien 0.000016
logging slow query 0.000002
cleaning up 0.000001
SELECT COUNT(*) FROM `таблица` LIMIT 1
starting 0.000007
checking query cache for query 0.000004
checking privileges on cached 0.000002
sending cached result to clien 0.000016
logging slow query 0.000002
cleaning up 0.000001
База 46,786,533 записей типа MyISAM объем 18.1 ГБ, при тестах нагрузка на сервер снята, т.е. оба результата сопоставимы. ИМХО большой разницы не увидел.
Так заинтриговал, что даже каменты выше не было времени почитать? В муисам общее количество строк в таблице хранится в метаданных, таблица может быть какого угодно размера — разницы не будет.
А мне вот еще интересно на основе каких теорий второй запрос может быть быстрее первого?
Как вы узнаёте количество записей в таблице?