Как узнать количество строк в PostgreSQL без COUNT(*)

В повседневной работе с PostgreSQL иной раз возникает задача оценить или узнать точное число строк в таблице. Классический способ — SELECT COUNT(*) FROM table — работает, но для больших таблиц он может быть медленным, поскольку выполняет полное сканирование таблицы или индекса. К счастью, есть альтернативные методы, которые либо дают мгновенный результат (пусть и приблизительный), либо позволяют оценить селективность сложного запроса без его фактического выполнения.

Приблизительная оценка через системный каталог pg_class

Самый быстрый способ получить представление о размере таблицы — обратиться к статистике, которую PostgreSQL собирает для планировщика запросов. Эта статистика хранится в системном представлении pg_class, а именно в поле reltuples.

Как это работает

pg_class содержит информацию о каждой таблице, индексе и других объектах базы данных. Поле reltuples хранит оценку количества строк, которую планировщик использует для построения планов выполнения. Это значение обновляется командами VACUUMANALYZE и некоторыми DDL-операциями (например, CREATE INDEX).

Точность

Оценка в reltuples не является точной — она может отставать от реального количества строк, особенно если после последнего обновления статистики в таблицу было вставлено или удалено много записей. Чтобы получить более свежую оценку, перед запросом можно выполнить:

Однако даже после ANALYZE значение остаётся приблизительным, поскольку оно вычисляется на основе выборочного сканирования.

Когда использовать

Этот метод идеально подходит для:

  • Мониторинга роста таблиц в системах наблюдения;
  • Быстрой оценки размера таблицы перед выполнением тяжёлой операции;
  • Ситуаций, где абсолютная точность не требуется (например, для приблизительного подсчёта записей в логах или временных таблицах).

Главное преимущество — скорость: запрос выполняется практически мгновенно даже для таблиц с миллиардами строк.

Мало букафф? Читайте есчо !

Команды консоли PostgreSql

Апрель 18, 2017 г.

Небольшая шпаргалка по работе в консоли postgreSQL. Чтобы полноценно работать с консолью, лучше всего переключиться на супер-юзера базы данных. ...

Читать

Экспорт данных из PostgreSQL в MySQL

Март 19, 2017 г.

Можно действовать разными способами, в зависимости от ситуации. Мне требовалось вытащить данные из проекта на Python/Django/PostgreSQL, чтобы потом экспортировать ...

Читать

Шпаргалка: извлечь текст из поля bytea (binary) в PostgreSQL

Май 6, 2026 г.

Cитуация: поле в таблице имеет тип bytea (бинарные данные), но вы точно знаете, что внутри него хранится обычный текст (например, из-за ошибки проектирования или legacy-системы). НЕ используйте ::text — он покажет шестнадцатеричный код (\x48656C6C6F), ...

Читать

Перенос базы PostgreSQL с сервера на сервер

Январь 24, 2017 г.

Не простая операция,  если вы не имели опыта настройки / работы с postgresql до сих пор. Расскажу поэтапно как выгрузить дамп базы, и как затем этот дамп ...

Читать
 

Комментарии к «Как узнать количество строк в PostgreSQL без COUNT(*)»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: