sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL-indexstorlek och värdenummer

pg_table_size('index_name') för individuellt index - men det visar bara storleken på disken, inte mängden data

count(*) för att få den exakta aktuella monteringen av rader

sum(pg_column_size(column_name)) from table_name för uppskattningar av kolumndatamängd

du kan prova själv som:

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)

och för att kontrollera hur psql får den individuella indexstorleken, kör den med psql -E ..

och än en gång - funktionerna ovan fungerar med storleken den tar på disken - det kan/(kanske inte) vara extremt annorlunda från den verkliga mängden data. dammsugning hjälper här

uppdatering Jag vet inte var du direkt får antalet "rader" i index, kan därför erbjuda endast indirekt sätt. Låt mig t.ex. ha partiellt index, så "antal rader" skiljer sig från tabellen. Jag kan kontrollera uppskattningar med EXPLAIN (naturligtvis måste du upprepa where-satsen för det) genom att kontrollera rows=66800 i Index Only Scan using ger mig en uppfattning om antalet rader i det indexet (det är faktiskt rows=64910 som du kan få genom att explain analyze eller bara köra count(*) ). Jag kan inte hitta relevant information i pg_stats - det kanske finns någon formel. Jag vet inte.



  1. MariaDB POWER() Förklarat

  2. Konvertera SQL datumformat? [dd.mm.åå till ÅÅÅÅ-MM-DD]

  3. JPA enum (java.lang.ClassCastException:org.postgresql.util.PGobject)

  4. MySQL fulltextsökning i flera tabeller