历史版本。 PostgreSQL 8.2 已结束支持。 请参阅 当前版本手册.
43.31. pg_statistic #
目录pg_statistic存储有关数据库内容的统计数据。其中的项由ANALYZE创建,随后供查询规划器使用。每个已分析过的表列在这个目录中都有一条对应的项。注意所有的统计数据天然就是近似的,即使它是最新的。
pg_statistic也存储关于索引表达式值的统计数据,就好像它们是真正的数据列,但在这种情况中starelid指索引。对一个普通非表达式索引列不会创建项,因为它将是底层表列的项的冗余。
由于不同种类的数据可能适合不同种类的统计信息,pg_statistic 在设计上尽量不对所存储的统计信息种类作出假定。只有极为通用的统计信息(例如空值情况)才在 pg_statistic 中有专用的列。其余统计信息都存储在“槽位”中。每个槽位都是一组相关的列,其内容由其中一列的代码编号来标识。更多信息见 src/include/catalog/pg_statistic.h。
pg_statistic不应公开可读,因为即使是表内容的统计信息也可能被认为是敏感的(例如,一个工资列的最大值和最小值就可能非常引人关注)。pg_stats是建立在pg_statistic之上的公开可读视图,它只会显示当前用户可读取的表的信息。
表 43.31. pg_statistic Columns
| 名称 | 类型 | 引用 | 描述 |
|---|---|---|---|
starelid | oid | | 被描述列所属的表或索引 |
staattnum | int2 | | 被描述列的编号 |
stanullfrac | float4 | 列中空值所占的比例 | |
stawidth | int4 | 非空项的平均存储宽度,以字节计 | |
stadistinct | float4 | 列中不同非空数据值的数量。一个大于零的值是不同值的真正数目。一个小于零的值是表中行数的乘数的负值;例如,对于一个约 80% 的值为非空且每个非空值平均出现两次的列,可以表示为stadistinct = -0.4。一个0值表示不同值的数目未知。
| |
stakind | int2 | 一个代码,它表示存储在该pg_statistic行中第N个“槽位”的统计类型。
| |
staop | oid | | 一个用于生成这些存储在第N个“槽位”的统计信息的操作符。例如,直方图槽位会使用<操作符,该操作符定义了这些数据的排序顺序。
|
stanumbers | float4[] | 第N个“槽位”中相应种类的数值统计信息;如果该槽位种类不涉及数值,则为 NULL
| |
stavalues | anyarray | 第N个“槽位”的类型的列值,如果该槽位类型不存储任何数据值则为 NULL。每个数组的元素值实际上都是指定列的数据类型或者是一个相关类型(如数组元素类型),因此,无法把这些列的类型定义得比anyarray更具体。
|