统计信息:优化器需要根据表、索引中的数据来选择查询方式,由于表的数据量很大,不可能每次执行查询时都实时的统计表中的数据量以及数据分布,所以需要定期分析数据,把表和索引的数据分布情况保存到数据字典里,以便优化器使用。

统计信息主要包括:表、表分区、索引、索引分区、列、列的直方图,主要关注表、索引上的统计信息,重点是数据量和数据块。 analyze 进行更新统计信息

PG _ STATISTICS 系统表存储有关该数据库的表和索引列的统计数据。需要有系统管理员权限才可以访问。其他用户访问该视图需要被授权。

名称                                    类型                                        描述

starelid                                 oid                                所描述的字段所属的表或者索引

starelkind                             char                              所属对象的类型

staattnum                            smallint                         所描述的字段在表中的编号,从1开始

stainherit                             boolean                         是否统计有继承关系的对象

stanulfrac                             real                                该字段中为 NULL 的记录的比率

stawidth                               smallint                         非 NULL 记录的平均存储宽度,以字节计

stadistinct                             real                               标识局统计信息所有 DN 上字段里唯一的非 NULL 数据值的数目

stakindN                               smallint                        一个编码,表示这种类型的统计存储在 pg _ statistic 行的第 n 个"槽位"

staopN                                  oid                               一个用于生成这些存储在第 n 个"槽位"的统计信息的操作符

 

PG STATS 视图提供对存储在 PG _ STATISTICS 表里面的单列统计信息的访问。

名称                                    类型                                    描述

schemaname                  name                               包含表的模式名。

tablename                      name                                表名。

attname                          name                                字段的名称。

inherited                        Boolean                             如果为真,则包含继承的子列,否则只是指定表的字段。

null _ frac                       real                                     记录中字段为空的百分比

avg _ width                    integer                               学段记录以字节记的平均宽度

n _ distinct                     real                                     如果大于零,表示字段中独立数值的估计数目。如果小于零,表示独立数值的数目被行数除的负数。用负数形式是因为 ANALYZE 认为独立数值的数目是随着表增长而增长;正数的形式用于在字段看上去好像有固定的可能值数目的情况下。比如,-1表示一个唯一字段,独立数值的个数和行数相同。

n _ dndistinct                 real                                    标识dn1上字段中非 NULL 数据的唯一值的数目。如果大于零,表示独立数值的实际数目。如果小于零,表示独立数值的目被行数除的负数。(比如,一个字段的数值平均出现概率为两次,则可以表示为 n _ dndistinct =-0.5). 如果等于零,表示独立数值的数目未知

most _ common _ vals    anyarray                           一个字段里最常用数值的列表。如果里面的字段数值是最常见的,则为 NULL

most _ common _ freqs  reall                                  一个最常用数值的频率的列表,也就是说,每个出现的次数除以行数。如果 most _ common _ vals 是 NULL ,则为 NULL