梧桐数据数据库查询优化(三)
统计数据
优化器为了得到优化的查询执行计划,需要使用到表的
统计信息。
优化器使用的一种统计数据是表的元组数(reltuples)
和磁盘页数(relpages)。这些信息存放在 pg_class 系统表
中。
reltuples 和 relpages 并不会实时更新。它们会在用
户执行 Analyze 时的时候更新。
postgres=# SELECT relname, relkind, reltuples, relpages FROM pg_class
WHERE relname = 'lineitem';
relname | relkind | reltuples | relpages
--------+---------+-------------+----------
lineitem | r | 6.00122e+06 | 29911
(1 row)
大部分查询会有一些 where 条件,用于从一个表中选择
出部分满足条件的元组。优化器需要估计选择谓词的选择率
(selectivity),即 where 条件中满足条件的元组比例。用
于估计选择率的统计信息存放在 pg_statistic 系统表中。
pg_statistic 系统表在用户使用 Analyze 时更新。
WuTongDB 有一个 pg_statistic 的视图 pg_stats 来帮
助用户更容易的查看一个表的统计数据。例如下面的语句可
以查看 lineitem 表的相关统计数据。
postgres=# SELECT * FROM pg_stats WHERE tablename = 'lineitem';
pg_statistic 中存放的信息由 ANALYZE 语句收集。其
中 most_common_vals 和 histogram_bounds 条目数由
评论