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

Come posso accelerare il conteggio delle righe in una tabella PostgreSQL?

Per un preventivo molto veloce:

SELECT reltuples FROM pg_class WHERE relname = 'my_table';

Ci sono diversi avvertimenti, però. Per uno, relname non è necessariamente univoco in pg_class . Possono esserci più tabelle con lo stesso relname in più schemi del database. Per essere inequivocabili:

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

Se non qualifichi lo schema del nome della tabella, un cast a regclass osserva il search_path corrente per scegliere la migliore corrispondenza. E se la tabella non esiste (o non può essere vista) in nessuno degli schemi nel search_path viene visualizzato un messaggio di errore. Vedi Tipi di identificatore oggetto nel manuale.

Il cast di bigint formatta il real numero bene, soprattutto per grandi conteggi.

Inoltre, reltuples può essere più o meno scaduto. Ci sono modi per compensare questo in una certa misura. Vedi questa risposta successiva con opzioni nuove e migliorate:

  • Un modo rapido per scoprire il conteggio delle righe di una tabella in PostgreSQL

E una query su pg_stat_user_tables è molte volte più lento (sebbene ancora molto più veloce del conteggio completo), poiché è una vista su un paio di tabelle.