MySQL — Медленная операция COUNT(*) / COUNT(id)

Жил я себе спокойно, разрабатывал приложения, углубился в базы данных, почитал про highload, и умные люди на конференции в прошлом году заявляли, что в PgSQL операция count(id) весьма медленная. Интересно, никогда об этом не думал, что там — посчитать по индексу… а, нет, не по индексу, полный скан, значит не так уж и быстро…

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

SELECT count(id) FROM <table>

запрос на статистику таблицы:

show table status like '<table name>';

Я тестировал на таблицы в ~20 тыс строк, скорость работы отличается значительно

  • 0,63 ms для обычного точного count, при этом реальное число 21902
  • 0,47 ms для статуса таблицы, а тут число 22008

То есть, чем таблица больше тем актуальнее использовать приближенный count вместо живого-настоящего.