支持的版本:当前 (17) / 16 / 15 / 14 / 13
开发版本:devel
不支持的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2

51.51. 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 的设计初衷是不对它存储的统计信息类型做太多假设。 只有非常通用的统计信息(例如空值)才在 pg_statistic 中给出专用列。 其他所有内容都存储在中,这些槽是相关列的组,其内容由槽的列中的代码编号标识。 有关更多信息,请参见 src/include/catalog/pg_statistic.h

pg_statistic 不应由公众读取,因为即使是关于表内容的统计信息也可能被认为是敏感的。 (示例:薪资列的最小值和最大值可能非常有趣。)pg_stats 是一个公开可读的 pg_statistic 视图,它仅公开有关当前用户可读的表的信息。

表 51.51. pg_statistic

列 类型

描述

starelid oid(引用 pg_class.oid

所描述的列所属的表或索引

staattnum int2(引用 pg_attribute.attnum

所描述的列的编号

stainherit bool

如果为 true,则统计信息包括来自子表的值,而不仅仅是指定关系中的值

stanullfrac float4

列的条目为空的比例

stawidth int4

非空条目的平均存储宽度(以字节为单位)

stadistinct float4

列中不同的非空数据值的数量。 大于零的值是不同的实际值数量。 小于零的值是表中行数的乘数的负数;例如,大约 80% 的值是非空的,并且每个非空值平均出现大约两次的列可以由 stadistinct = -0.4 表示。 零值表示不同的值数量未知。

stakindN int2

一个代码编号,指示存储在 pg_statistic 行的第 N中的统计信息的种类。

staopN oid(引用 pg_operator.oid

用于派生存储在第 N中的统计信息的操作符。 例如,直方图槽会显示定义数据排序顺序的 < 操作符。 如果统计信息种类不需要操作符,则为零。

stacollN oid(引用 pg_collation.oid

用于派生存储在第 N中的统计信息的排序规则。 例如,用于可排序列的直方图槽将显示定义数据排序顺序的排序规则。 对于不可排序的数据,为零。

stanumbersN float4[]

适用于第 N的相应种类的数字统计信息,如果槽种类不涉及数字值,则为 null

stavaluesN anyarray

适用于第 N的相应种类的列数据值,如果槽种类不存储任何数据值,则为 null。 每个数组的元素值实际上是特定列的数据类型,或相关类型(例如数组的元素类型),因此无法比 anyarray 更具体地定义这些列的类型。


提交更正

如果您在文档中看到任何不正确的内容,与您使用特定功能的经验不符或需要进一步澄清的内容,请使用此表格报告文档问题。