pg_statistic
存储有关该数据库内容的
统计数据.记录是
ANALYZE
创建的,并且随后
被查询规划器使用.
请注意所有统计信息天生都是近似的数值,
即使我们假设它是最新的也如此.
因为不同类型的统计信息适用于不同类型的数据,
pg_statistic
被设计成不太在意自己存储的是什么类型的统计.
只有极为常用的统计信息(比如 NULL)才在
pg_statistic
里给予专用的字段.
其它所有东西都存储在"槽位"中,而槽位是一组相关的字段,
它们的内容用槽位中的一个字段的代码号码表示.
更详细的信息请参阅
src/include/catalog/pg_statistic.h
.
pg_statistic
不应该是公众可读的,
因为即使是表内容的统计信息也应该认为是敏感的.
(例子∶薪水字段的最大最小值肯定是相当让人感兴趣的.)
pg_stats
是一个在
pg_statistic
上的全局可读的视图,它
只显示那些表对于当前用户可读的信息.
pg_stats
也设计成具有比其所依靠的下层
pg_statistic
表更具可读性的信息 ---
代价是增加新的槽位类型的时候,它的大纲必须扩展.
Table 3-19. pg_statistic 字段
名字 |
类型 |
参考 |
描述 |
starelid |
oid
|
pg_class.oid |
所描述的字段所属的表 |
staattnum |
int2
|
pg_attribute.attnum |
所描述的字段的个数 |
stanullfrac |
float4
|
|
该字段中为 NULL 的记录的分数 |
stawidth |
int4
|
|
非 NULL 记录的平均存储宽度,以字节计 |
stadistinct |
float4
|
|
字段里唯一的非 NULL 数据值的数目.
一个大于零的数值是独立数值的实际数目.
一个小于零的数值是表中行数的分数的负数(比如,一个字段的数值
平均出现概率为两次,那么可以表示为 stadistince = -0.5).
零值表示独立数值的数目未知.
|
stakindN |
int2
|
|
一个编码,表示这种类型的统计存储在
pg_statistic
行的
第N个"槽位"
|
staopN |
oid
|
pg_operator.oid |
一个用于生成这些存储在第N个"槽位"的统计信息的操作符.
比如,一个柱面图槽位会显示"<"操作符,该操作符定义了
该数据的排序顺序.
|
stanumbersN |
float4[]
|
|
第N个"槽位"的相关类型的数值类型统计,
如果该槽位和数值类型没有关系,那么就是NULL.
|
stavaluesN |
text[]
|
|
第 N 个"槽位"相关类型的字段数据值,如果该槽位类型不存储
任何数据值那么就是 NULL.为了做到数据类型无关,
所有字段数据值都转换成外部文本形式,然后当做 TEXT 数据存储.
|
|