PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como acelero a contagem de linhas em uma tabela do PostgreSQL?


Para um orçamento muito rápido:
SELECT reltuples FROM pg_class WHERE relname = 'my_table';

Existem várias ressalvas, no entanto. Por um lado, relname não é necessariamente único em pg_class . Pode haver várias tabelas com o mesmo relname em vários esquemas do banco de dados. Para ser inequívoco:
SELECT reltuples::bigint FROM pg_class WHERE oid = 'my_schema.my_table'::regclass;

Se você não qualificar o nome da tabela pelo esquema, uma conversão para regclass observa o search_path atual para escolher o melhor jogo. E se a tabela não existir (ou não puder ser vista) em nenhum dos esquemas no search_path você recebe uma mensagem de erro. Consulte Tipos de identificador de objeto no manual.

A conversão para bigint formata o real número bem, especialmente para grandes contagens.

Além disso, reltuples pode estar mais ou menos desatualizado. Existem maneiras de compensar isso até certo ponto. Veja esta resposta posterior com opções novas e aprimoradas:
  • Maneira rápida de descobrir a contagem de linhas de uma tabela no PostgreSQL

E uma consulta em pg_stat_user_tables é muitas vezes mais lento (embora ainda muito mais rápido que a contagem total), pois é uma visão em algumas tabelas.