sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan fremskynder jeg optælling af rækker i en PostgreSQL-tabel?

For et meget hurtigt skøn:

SELECT reltuples FROM pg_class WHERE relname = 'my_table';

Der er dog flere forbehold. For det første relname er ikke nødvendigvis unik i pg_class . Der kan være flere tabeller med det samme relname i flere skemaer i databasen. For at være utvetydig:

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

Hvis du ikke skemakvalificerer tabelnavnet, en cast til regclass observerer den aktuelle search_path at vælge det bedste match. Og hvis tabellen ikke findes (eller ikke kan ses) i nogen af ​​skemaerne i search_path får du en fejlmeddelelse. Se Objektidentifikatortyper i manualen.

Castet til bigint formaterer den real tal pænt, især for store tæller.

Også reltuples kan være mere eller mindre forældet. Der er måder at kompensere for dette til en vis grad. Se dette senere svar med nye og forbedrede muligheder:

  • Hurtig måde at opdage rækkeantallet i en tabel i PostgreSQL

Og en forespørgsel på pg_stat_user_tables er mange gange langsommere (dog stadig meget hurtigere end fuld optælling), da det er en visning på et par borde.



  1. MySQL INSERT eller REPLACE kommandoer

  2. fange DB-undtagelse i JSF+EJB-applikation

  3. Hvordan beregner jeg en løbende total i SQL uden at bruge en markør?

  4. 3 måder at få en liste over databaser i SQL Server (T-SQL)