Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

53.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_statspg_statistic 的可公开读取视图,它仅公开当前用户可读取的那些表的相关信息。

表 53.51. pg_statistic

列类型

描述

starelid oid(引用 pg_class.oid

描述的列所属的表或索引

staattnum int2(引用 pg_attribute.attnum

描述的列的编号

stainherit bool

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

stanullfrac float4

列的条目中为 null 的部分

stawidth int4

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

stadistinct float4

列中非 null 数据值的唯一数量。大于零的值是唯一值的实际数量。小于零的值是表中行数的乘数的负值;例如,其中约 80% 的值为非 null 且每个非 null 值平均出现两次的列可以用 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 更具体地定义这些列的类型。