sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo acelero el conteo de filas en una tabla de PostgreSQL?

Para una estimación muy rápida:

SELECT reltuples FROM pg_class WHERE relname = 'my_table';

Sin embargo, hay varias advertencias. Por un lado, relname no es necesariamente único en pg_class . Puede haber varias tablas con el mismo relname en múltiples esquemas de la base de datos. Para ser inequívoco:

SELECT reltuples::bigint FROM pg_class WHERE oid = 'my_schema.my_table'::regclass;

Si no califica el esquema del nombre de la tabla, una conversión a regclass observa la search_path actual para elegir la mejor coincidencia. Y si la tabla no existe (o no se puede ver) en ninguno de los esquemas en search_path recibe un mensaje de error. Ver Tipos de identificadores de objetos en el manual.

El elenco de bigint formatea el real número muy bien, especialmente para grandes conteos.

Además, reltuples puede estar más o menos desactualizado. Hay maneras de compensar esto hasta cierto punto. Vea esta respuesta posterior con opciones nuevas y mejoradas:

  • Forma rápida de descubrir el número de filas de una tabla en PostgreSQL

Y una consulta en pg_stat_user_tables es muchas veces más lento (aunque todavía mucho más rápido que el conteo completo), ya que es una vista en un par de mesas.