Postgresql 中文操作指南
53.51. pg_statistic #
目录 pg_statistic 存储有关数据库内容的统计数据。 ANALYZE 创建条目,随后查询计划器使用条目。请注意,所有统计数据从本质上都是近似的,即使假定它是最新的。
在很多情况下,对于每个已分析的表列会有一条 stainherit = false 的条目。如果表具有继承子项或分区,还会创建 stainherit = true 的第二个条目。该行表示在继承树中该列的统计信息,即使用 SELECT _column FROM table * , whereas the _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 上一个可公开读取的视图,仅显示当前用户可读取的那些表的统计信息。
Table 53.51. pg_statistic Columns
Column Type Description |
starelid oid (引用 pg_class . oid )所描述列所属的表或索引 |
staattnum int2 (引用 pg_attribute . attnum )已描述列的数目 |
stainherit bool 如果为真,表示统计信息包含来自子表的 value,而不仅仅是指定关联中的 value |
stanullfrac float4 列条目中为 Null 的部分 |
stawidth int4 非 Null 条目的平均存储宽度(以字节为单位) |
stadistinct float4 列中非 Null 数据值的数目。大于零的值是实际的非 Null 数据值的数目。小于零的值是一个负数,表示表中行的乘数。例如,大约 80% 的值是非 Null 值,每个非 Null 值平均出现两次的列可表示为 stadistinct = -0.4。零表示非 Null 数据值的数目未知。 |
stakind_N_ int2 表示 N_th “slot” of the _pg_statistic 行中存储的统计信息的代码号。 |
staop_N_ oid (引用 pg_operator . oid )用于从 N_th “slot”. For example, a histogram slot would show the _< 中派生存储的统计信息的运算符,它定义数据的排序顺序。如果统计信息类型不要求运算符,则为零。 |
stacoll_N_ oid (引用 pg_collation . oid )用于从第 N 个“槽”中派生存储的统计信息的对列。例如,一个可对列列的直方图槽会显示定义数据排序顺序的对列。对于不可对列的数据则为零。 |
stanumbers_N_ float4[] 针对第 N 个“槽”的适当类型进行的数字统计信息,如果槽类型不涉及数字值,则为 Null |
stavalues_N_ anyarray 适合 N_th “slot”, or null if the slot kind does not store any data values. Each array’s element values are actually of the specific column’s data type, or a related type such as an array’s element type, so there is no way to define these columns' type more specifically than _anyarray 的列数据值。 |