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

Dimensione dell'indice PostgreSQL e numero del valore

pg_table_size('index_name') per indice individuale - ma ti mostrerà solo la dimensione del disco, non la quantità di dati

count(*) per ottenere l'esatto monte di righe corrente

sum(pg_column_size(column_name)) from table_name per le stime sulla quantità di dati della colonna

puoi metterti alla prova come:

t=# \di+ tbl*
                                    List of relations
 Schema |         Name         | Type  |  Owner   |     Table      |  Size  | Description
--------+----------------------+-------+----------+----------------+--------+-------------
 public | tbl_pkey  | index | postgres | tbl | 156 MB |
 public | tbl_unpic | index | postgres | tbl | 46 MB  |
 public | tbl_x1    | index | postgres | tbl | 57 MB  |
(3 rows)

t=# \dt+ tbl
                        List of relations
 Schema |      Name      | Type  |  Owner   | Size  | Description
--------+----------------+-------+----------+-------+-------------
 public | tbl | table | postgres | 78 MB |
(1 row)

t=# select pg_size_pretty(pg_total_relation_size('tbl'));
 pg_size_pretty
----------------
 337 MB
(1 row)

t=# select 78+57+46+156;
 ?column?
----------
      337
(1 row)

e per verificare come psql ottiene la dimensione dell'indice individuale, eseguilo con psql -E ..

e ancora una volta - le funzioni sopra funzionano con le dimensioni del disco - potrebbe/(potrebbe non essere) estremamente diverso dalla quantità reale di dati. l'aspirazione aiuta qui

aggiornamento Non so dove ottieni direttamente il numero di "righe" nell'indice, quindi puoi offrire solo un modo indiretto. Ad esempio, fammi avere un indice parziale, quindi "numero di righe" è diverso dalla tabella. Posso controllare le stime con EXPLAIN (ovviamente devi ripetere la clausola where per quello) controllando il rows=66800 in Index Only Scan using mi dà un'idea sul numero di righe in quell'indice (in realtà è rows=64910 che puoi ottenere da explain analyze o semplicemente eseguendo count(*) ). Non riesco a trovare informazioni rilevanti in pg_stats - forse c'è qualche formula. Non lo so.