sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur snabbar jag på att räkna rader i en PostgreSQL-tabell?

För en mycket snabb uppskattning:

SELECT reltuples FROM pg_class WHERE relname = 'my_table';

Det finns dock flera varningar. För en, relname är inte nödvändigtvis unikt i pg_class . Det kan finnas flera tabeller med samma relname i flera scheman i databasen. För att vara entydig:

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

Om du inte schemakvalificerar tabellnamnet, en cast till regclass observerar den aktuella search_path att välja den bästa matchningen. Och om tabellen inte finns (eller inte kan ses) i något av schemana i search_path du får ett felmeddelande. Se Objektidentifieringstyper i manualen.

Casten till bigint formaterar den real siffra bra, särskilt för stora räkningar.

Även reltuples kan vara mer eller mindre inaktuell. Det finns sätt att kompensera för detta till viss del. Se detta senare svar med nya och förbättrade alternativ:

  • Snabbt sätt att upptäcka radantalet i en tabell i PostgreSQL

Och en fråga på pg_stat_user_tables är många gånger långsammare (men fortfarande mycket snabbare än fullt antal), eftersom det är en vy på ett par bord.



  1. När ska man stänga markörer med MySQLdb

  2. Hur man lägger till sekvensnummer för varje element i en grupp med hjälp av en SQL-fråga utan temporära tabeller

  3. Kör Galera Cluster på Kubernetes

  4. Hur man konverterar tal till ord - ORACLE