PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-Indexgröße und Wertnummer

pg_table_size('index_name') für individuellen Index - aber es zeigt Ihnen nur die Größe auf der Festplatte, nicht die Datenmenge

count(*) um die genaue aktuelle Menge an Zeilen zu erhalten

sum(pg_column_size(column_name)) from table_name für Schätzungen der Spaltendatenmenge

Sie können etwas ausprobieren wie:

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)

und um zu überprüfen, wie psql die individuelle Indexgröße erhält, führen Sie es mit psql -E aus ..

und noch einmal - die oben genannten Funktionen arbeiten mit der Größe der Festplatte - sie kann / (muss nicht) extrem von der tatsächlichen Datenmenge abweichen. Staubsaugen hilft hier

aktualisieren Ich weiß nicht, wo Sie direkt die Anzahl der "Zeilen" im Index erhalten, daher kann ich nur einen indirekten Weg anbieten. Lassen Sie mich zB einen Teilindex haben, also unterscheidet sich "Anzahl der Zeilen" von der Tabelle. Ich kann Schätzungen mit EXPLAIN überprüfen (natürlich müssen Sie dafür die where-Klausel wiederholen), indem ich die rows=66800 überprüfe in Index Only Scan using gibt mir eine Vorstellung von der Anzahl der Zeilen in diesem Index (eigentlich ist es rows=64910 die Sie durch explain analyze erhalten können oder einfach count(*) ausführen ). Ich kann keine relevanten Informationen in pg_stats finden - vielleicht gibt es eine Formel. Ich weiß es nicht.