Como suelo olvidar con facilidad ciertas cosas y al no usar mucho del.icio.us para recordarlas, pongo aquí un artículo que encontré hace unos días por si alguien más le encuentra utilidad. 😉
En cualquier gestor de base de datos, para conocer el número de registros basta con hacer uso de la función de agregación count.
Pero hacer esta operación en PostgreSQL sobre tablas grandes es bastante costosa porque se realiza un recorrido secuencial para obtener el número exacto de registros.
QUERY PLAN
---------------------------------------------------------------------------------------------------------
Aggregate (cost=4.50..4.51 rows=1 width=0) (actual time=0.882..0.884 rows=1 loops=1)
Total runtime: 0.963 ms
(3 filas)
Una forma de obtener el número aproximado de registros de manera rápida y sin los problemas inherentes al uso de la función count, es haciendo una consulta a los catálogos del sistema (pg_class):
JOIN pg_namespace ON (pg_class.relnamespace = pg_namespace.oid)
WHERE nspname = 'public' -- esquema
AND relname = 'actor'; -- nombre de la tabla
Para que lo anterior funcione o dé resultados más cercanos a la realidad, es necesario ejecutar ANALYZE sobre esa tabla, tarea que se debe realizar periódicamente.