pg_statistic
pg_statistic
系统目录表用于存储数据库中表内容的统计信息。这些记录由 ANALYZE
命令生成,并被查询优化器用于优化查询性能。请注意,即使统计信息是最新的,它们也仍然是近 似值。
通常,对于每个经过分析的表列,会有一条 stainherit = false
的记录。如果该表存在继承子表,Apache Cloudberry 会额外生成一条 stainherit = true
的记录,表示整个继承树上的统计信息。例如:SELECT column FROM table*
返回的数据会使用 stainherit = true
的记录;而 SELECT column FROM ONLY table
则对应 stainherit = false
的记录。
pg_statistic
还存储了索引表达式的统计信息。这些表达式被视为“虚拟列”,其中 starelid
指向索引对象。普通的非表达式索引列不会额外生成记录,因为其统计信息已由底层表列覆盖。目前,索引表达式的统计记录始终具有 stainherit = false
。
由于不同类型的数据适合不同形式的统计,pg_statistic
的设计避免对其存储的统计信息类型做出过多假设。只有最通用的统计数据(如空值比例)拥有独立字段,其他统计信息都存储在“槽位”中,即一组相关字段,这些字段的含义由某个标识码指定。
pg_statistic
不应对所有用户开放,因为即使是统计信息也可能包含敏感数据(例如薪资列的最大/最小值)。系统提供了一个公开可读的视图 pg_stats
,该视图只会显示当前用户有权限访问的表的统计信息。
警告