sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-indexgrootte en waardenummer

pg_table_size('index_name') voor individuele index - maar het toont u alleen de grootte op de schijf, niet de hoeveelheid gegevens

count(*) om de exacte huidige hoeveelheid rijen te krijgen

sum(pg_column_size(column_name)) from table_name voor schattingen van de hoeveelheid kolomgegevens

je kunt jezelf iets proberen zoals:

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)

en om te controleren hoe psql de individuele indexgrootte krijgt, voer je het uit met psql -E ..

en nogmaals - bovenstaande functies werken met de grootte die nodig is van de schijf - het kan wel / niet extreem verschillen van de werkelijke hoeveelheid gegevens. stofzuigen helpt hier

bijwerken Ik weet niet waar je direct het aantal "rijen" in de index vandaan haalt, dus ik kan het alleen indirect aanbieden. Laat me bijvoorbeeld een gedeeltelijke index hebben, dus "aantal rijen" verschilt van tabel. Ik kan schattingen controleren met EXPLAIN (je moet natuurlijk herhalen waar clausule daarvoor) door de rows=66800 te controleren in Index Only Scan using geeft me een idee van het aantal rijen in die index (eigenlijk is het rows=64910 die je kunt krijgen door explain analyze of gewoon count(*) uitvoeren ). Ik kan geen relevante informatie vinden in pg_stats - misschien is er een formule. Ik weet het niet.



  1. MySQL BESTELLEN DOOR twee velden voorwaarde

  2. Uitzondering in hoofdthread org.hibernate.HibernateException:fout bij toegang tot stax-stream

  3. Hoe kunnen we ISNULL gebruiken voor alle kolomnamen in SQL Server 2008?

  4. fouten in GWT Hibernate-programma 2