我正在尝试获取索引的统计信息。我正在寻找索引中的总值及其大小。
我只能找到表上所有索引的大小。
表 pg_class
列 relpages
和 reltuples
显示表的值,而不是特定索引级别。
此外,函数 pg_indexes_size
将表名作为参数并返回该表的总索引大小。
有没有办法在索引级别获取大小和行号? 我正在使用 PostgreSQL 9.3。
最佳答案
pg_table_size('index_name')
用于单个索引 - 但它只显示磁盘上的大小,而不是条目的数量。
count(*)
获取准确的当前行数
sum(pg_column_size(column_name)) from table_name
用于估计列数据大小。
你可以试试这样的:
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)
并检查 psql
如何获取单个索引大小,使用 psql -E
运行它。
再一次 - 上面的函数与它在磁盘上占用的大小一起工作 - 它可能/(可能不会)与实际数据量有很大不同。吸尘在这里有帮助
更新
我不知道你从哪里直接得到索引中“行”的数量,所以我只能提供间接的方式。例如,让我有一个部分索引,因此索引中的“行数”与表中的行数不同。我可以用 EXPLAIN 检查估计值(当然你必须为此重复 WHERE
子句)检查 Index Only Scan using 中的
让我了解该索引中的行数(实际上它是 rows=66800
usingrows=64910
,您可以通过 explain analyze
或运行 count(*)
)。我在 pg_stats
中找不到相关信息 - 也许有一些公式。我不知道。
关于PostgreSQL 索引大小和值数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46470030/