14.2 计划器使用的统计信息
14.2.1. Single-Column Statistics
14.2.1 单列统计信息
正如之前章接所述,查询计划器需要预估检索的行以选择最优执行计划。本节简单介绍系统据以进行预估的统计信息。
统计信息中包含表和索引中的所有行,以及每个表和索引所占用的磁盘块数。这些信息保存在表pg_class的reltuples和relpages列:
SELECT relname, relkind, reltuples, relpages
FROM pg_class
WHERE relname LIKE 'tenk1%';
relname | relkind | reltuples | relpages
----------------------+---------+-----------+----------
tenk1 | r | 10000 | 358
tenk1_hundred | i | 10000 | 30
tenk1_thous_tenthous | i | 10000 | 30
tenk1_unique1 | i | 10000 | 30
tenk1_unique2 | i | 10000 | 30
(5 rows)
根据结果可以看出,表一共10000行,但索引比表要小很多。
reltuples和relpages并不是实时更新的,所以其中有时会包含过旧的数据。VACUUM,ANALYZE以及一些DDL命令(如CREATE INDEX)可修改这几列的值。VACUUM或ANALYZE命令并不会扫描整个表,所以只会更新一个近似值。无论如何,计划器均根据当前这两列的值选取执行计划,因此可能会造成近似的最优执行计划。
统计信息存储在pg_statistic中,其内信息由ANALYZE和VACUUM ANALYZE命令更新。相较于检索pg_statistic查看统计信息,建议检索pg_stats。这个视图更友好:
postgres=# SELECT relname, relkind, reltuples, relpages
FROM pg_class;
-[ RECORD 1 ]--------------------------------------------
relname | test
relkind | r
reltuples | 0
relpages | 0
-[ RECORD 2 ]--------------------------------------------
relname | pg_statistic
relkind | r
reltuples | 402
relpages | 18
-[ RECORD 3 ]--------------------------------------------
relname | pg_type
relkind | r
reltuples | 411
relpages | 10
更多有关计划器对统计信息的使用,请参见第70章。
本文发布于:2024-02-02 12:47:40,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170684925643900.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |