pg_statistic #该目录表 pg_statistic 存储了数据库内容的统计信息。这些条目由 ANALYZE 命令创建,并随后被查询规划器使用。请注意,即使假设统计数据是最新的,所有统计数据本质上都是近似值。
通常,对于每个已分析的表列,都有一个 stainherit = false 的条目。如果表有继承的子表或分区,还会创建一个 stainherit = true 的第二个条目。此行代表该列在继承树上的统计信息,即 SELECT 所能看到的数据的统计信息,而 column FROM table*stainherit = false 的行代表 SELECT 的结果。column FROM ONLY table
pg_statistic 还存储了关于索引表达式值的统计信息。这些被描述为实际数据列;特别是,starelid 引用索引。但是,对于普通的非表达式索引列,不会创建条目,因为这与底层表列的条目是冗余的。目前,索引表达式的条目总是具有 stainherit = false。
由于不同种类的统计数据可能适用于不同种类的数据,pg_statistic 的设计并未对它存储的统计数据的种类做太多假设。只有极其通用的统计数据(例如 NULL 值情况)在 pg_statistic 中有专门的列。其他所有内容都存储在“槽”(slots)中,这些槽是相关列的组,其内容通过其中一个槽列中的代码编号进行标识。有关更多信息,请参阅 src/include/catalog/pg_statistic.h。
pg_statistic 不应该被公众读取,因为即使是关于表内容的统计信息也可能被视为敏感信息。(例如:工资列的最小值和最大值可能非常有趣。) pg_stats 是 pg_statistic 上一个可公开读取的视图,它仅显示当前用户可读的表的信息。
表 52.51. pg_statistic 列
|
列 类型 描述 |
|---|
|
所描述列所属的表或索引 |
|
所描述列的编号 |
|
如果为 true,则统计信息包含子表的值,而不仅仅是指定关系中的值。 |
|
列中 NULL 条目的比例 |
|
非 NULL 条目的平均存储宽度(字节) |
|
列中不同非 NULL 数据值的数量。大于零的值是实际的不同值的数量。小于零的值是表中行数的负乘数;例如,一个值约 80% 为非 NULL 且平均每个非 NULL 值出现两次的列可以用 |
|
一个代码编号,指示 |
|
用于推导第 |
|
用于推导第 |
|
第 |
|
第 |