Aller au contenu

Estimer le nombre de lignes

Fonction count()

La méthode habituelle consiste à simplement compter le nombre de lignes dans la table :

SELECT count(*)
FROM nom_schema.nom_table;

Avantage : C’est la seule méthode qui permet d’obtenir le nombre exact de lignes.

Inconvénient : Cela exige de parcourir entièrement la table, ce qui peut être long si la table est volumineuse.

Tables statistiques

Si une simple estimation du nombre de lignes est suffisante, il est possible d’interroger directement le catalogue système :

SELECT n_live_tup
FROM pg_stat_all_tables
WHERE schemaname = 'nom_schema'
AND relname = 'nom_table';

Avantage : Requête très rapide.

Inconvénient : Le nombre de lignes affiché est une estimation faite par les opérations VACUUM et ANALYZE. Elles ne sont pas exactes. De plus, si la table est vide, le nombre de lignes indiqué ne sera jamais zéro.

Tables statistiques, version avancée

Pour avoir une estimation un peu plus juste, on peut prendre en compte la taille réelle de la table pour connaître la différence entre taille réelle et taille estimée, puis appliquer ce facteur au nombre de lignes estimé :

SELECT relname,
  round(pg_relation_size(relname::regclass)/(relpages*(current_setting('block_size'))::double precision)*reltuples) 
FROM pg_class c
  JOIN pg_namespace n on c.relnamespace = n.oid
WHERE relkind='r' AND relpages>0 
  AND nspname = 'nom_schema'
  AND relname = 'nom_table';

Avantage : Requête moyennement rapide.

Inconvénient : Cela reste une estimation, mais une estimation ajustée.