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.