我正在尝试获取索引的统计数据。我正在寻找索引中的总值及其大小。
我只能找到表上所有索引的大小。
桌子pg_class
column relpages
and reltuples
显示表的值,而不是特定索引级别的值。
另外,功能pg_indexes_size
将表名作为参数并返回该表的总索引大小。
有没有办法获取索引级别的大小和行号?
我正在使用 PostgreSQL 9.3。
pg_table_size('index_name')
对于单个索引 - 但它只显示磁盘上的大小,而不是数量entries.
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
.
再说一遍 - 上面的函数与磁盘上占用的大小一起工作 - 它可能/(可能不会)与实际数据量有很大不同。吸尘在这里有帮助
update
我不知道你在哪里直接获取索引中的“行”数,因此我只能提供间接的方式。例如,让我有一个部分索引,因此索引中的“行数”与表中的行数不同。我可以用 EXPLAIN 检查估计(当然你必须重复WHERE
条款)检查rows=66800
in Index Only Scan using
让我了解该索引中的行数(实际上是rows=64910
你可以通过explain analyze
或者只是跑步count(*)
)。我在以下位置找不到相关信息pg_stats
- 也许有一些公式。我不知道。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)