PostgreSQL 索引大小和值数

标签 postgresql indexing postgresql-9.3

我正在尝试获取索引的统计信息。我正在寻找索引中的总值及其大小。

我只能找到表上所有索引的大小。 表 pg_classrelpagesreltuples 显示表的值,而不是特定索引级别。

此外,函数 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 using让我了解该索引中的行数(实际上它是 rows=64910,您可以通过 explain analyze 或运行 count(*) )。我在 pg_stats 中找不到相关信息 - 也许有一些公式。我不知道。

关于PostgreSQL 索引大小和值数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46470030/

相关文章:

postgresql - 如何在插入显示测试消息之前创建触发器功能

sql - Postgres 左外连接似乎没有使用表索引

postgresql - 比较去除空格

sql - 将 SQL ResultSet 转换为 json

sql 查询 double - null >0 不返回任何记录

javascript - docker , postman 。端口已经分配

mysql - 独立于 DBMS 的方式访问表模式,包括主键(如果有)

MySQL - 范围条件和排序依据

sql-server - 复合非聚集索引和覆盖索引有什么区别

json - postgresql存储过程输入json解析