PostgreSQL 的查询规划器(query planner)使用统计信息来选择最优的查询计划。这些统计信息帮助规划器估计查询执行的成本,从而选择最有效的执行路径。以下是 PostgreSQL 中使用的一些主要统计信息:

1. 表统计信息:
   - 行数估计: 统计信息包括表中行的估计数量。这有助于规划器决定使用哪个查询计划。
   - 列值的分布: PostgreSQL 统计信息中还包括有关列值分布的信息,例如最小值、最大值和直方图。这些信息对于确定最佳的索引和过滤条件非常重要。

2. 索引统计信息:
   - 唯一性估计: 统计信息包括索引中唯一值的估计数量,这有助于规划器决定是否使用索引来执行查询。
   - 列值的分布: 类似于表统计信息,索引统计信息也包括列值的分布,以帮助规划器优化查询计划。

3. 系统表统计信息:
   - pg_statistic 表: 包含关于表的列的统计信息。这些信息用于估计查询条件的选择性,以及为了确定最佳的连接顺序和连接方法。

4. 系统表 pg_class 和 pg_index:
   - 表大小和索引信息: 规划器使用这些表中的信息来估计表的大小、索引的大小以及它们之间的关系,从而影响查询计划的选择。

5. 系统表 pg_namespace:
   - 命名空间信息: 规划器使用命名空间信息来确定表和索引的所属关系,以便正确选择执行计划。

这些统计信息可以通过运行 ANALYZE 命令来收集和更新。例如:
ANALYZE your_table;

定期更新统计信息对于确保规划器做出准确的决策非常重要。如果表的数据分布或查询模式发生变化,建议手动运行 ANALYZE 来更新统计信息,或者配置自动化的统计信息更新任务。


转载请注明出处:http://www.zyzy.cn/article/detail/8237/PostgreSQL