PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie beschleunige ich das Zählen von Zeilen in einer PostgreSQL-Tabelle?

Für eine sehr schnelle Schätzung:

SELECT reltuples FROM pg_class WHERE relname = 'my_table';

Es gibt jedoch mehrere Vorbehalte. Zum einen relname ist in pg_class nicht unbedingt eindeutig . Es kann mehrere Tabellen mit demselben relname geben in mehreren Schemas der Datenbank. Um eindeutig zu sein:

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

Wenn Sie den Tabellennamen nicht schemaqualifizieren, erfolgt eine Umwandlung in regclass beobachtet den aktuellen search_path um die beste Übereinstimmung auszuwählen. Und wenn die Tabelle in keinem der Schemas im search_path existiert (oder nicht gesehen werden kann). du bekommst eine fehlermeldung. Siehe Objektkennungstypen im Handbuch.

Die Umwandlung in bigint formatiert den real Nummer schön, besonders für große Zählungen.

Auch reltuples können mehr oder weniger veraltet sein. Es gibt Möglichkeiten, dies bis zu einem gewissen Grad auszugleichen. Siehe diese spätere Antwort mit neuen und verbesserten Optionen:

  • Schneller Weg, um die Zeilenanzahl einer Tabelle in PostgreSQL zu ermitteln

Und eine Abfrage auf pg_stat_user_tables ist um ein Vielfaches langsamer (aber immer noch viel schneller als die vollständige Zählung), da dies eine Ansicht auf ein paar Tabellen ist.