PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment accélérer le comptage des lignes dans une table PostgreSQL ?

Pour une estimation très rapide :

SELECT reltuples FROM pg_class WHERE relname = 'my_table';

Il y a cependant plusieurs mises en garde. D'une part, relname n'est pas nécessairement unique dans pg_class . Il peut y avoir plusieurs tables avec le même relname dans plusieurs schémas de la base de données. Pour être sans ambiguïté :

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

Si vous ne qualifiez pas de schéma le nom de la table, un cast en regclass observe le search_path actuel pour choisir le meilleur match. Et si la table n'existe pas (ou ne peut être vue) dans aucun des schémas du search_path vous obtenez un message d'erreur. Voir Types d'identifiant d'objet dans le manuel.

Le cast en bigint formate le real chiffre bien, surtout pour les gros comptes.

Aussi, reltuples peut être plus ou moins obsolète. Il existe des moyens de compenser cela dans une certaine mesure. Voir cette réponse ultérieure avec des options nouvelles et améliorées :

  • Moyen rapide de découvrir le nombre de lignes d'une table dans PostgreSQL

Et une requête sur pg_stat_user_tables est plusieurs fois plus lent (bien que toujours beaucoup plus rapide que le comptage complet), car il s'agit d'une vue sur quelques tables.