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

PostgreSQL-indeksstørrelse og værdinummer

pg_table_size('index_name') for individuelt indeks - men det vil kun vise dig størrelsen på disken, ikke mængden af ​​data

count(*) for at få den nøjagtige aktuelle montering af rækker

sum(pg_column_size(column_name)) from table_name for estimeringer af kolonnedatamængde

du kan prøve dig selv 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)

og for at kontrollere, hvordan psql får den individuelle indeksstørrelse, skal du køre den med psql -E ..

og endnu en gang - ovenstående funktioner fungerer med størrelsen på disken - det kan/(måske ikke) være ekstremt forskelligt fra den reelle mængde data. støvsugning hjælper her

opdatering Jeg ved ikke, hvor du direkte får antallet af "rækker" i indeks, kan derfor kun tilbyde indirekte måde. Lad mig f.eks. have delvist indeks, så "antal rækker" er forskellig fra tabel. Jeg kan tjekke estimater med EXPLAIN (selvfølgelig skal du gentage hvor-klausulen for det) ved at tjekke rows=66800 i Index Only Scan using giver mig en idé om antallet af rækker i det indeks (faktisk er det rows=64910 som du kan få ved at explain analyze eller bare køre count(*) ). Jeg kan ikke finde relevant info i pg_stats - måske er der en formel. Jeg ved det ikke.



  1. SQL Server seneste versioner, udgaver og SQL Server-historik

  2. Dvale webapplikation med MySQL failover

  3. Størrelsen på VARBINARY-feltet i SQL Server 2005

  4. Ydelse af sys.partitioner