Жил я себе спокойно, разрабатывал приложения, углубился в базы данных, почитал про 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 вместо живого-настоящего.