postgreSQL - pg_class 问题

标签 postgresql

PostgreSQL 将有关表的统计信息存储在名为 pg_class 的系统表中。查询规划器为每个查询访问该表。这些统计数据只能使用分析命令进行更新。如果不经常运行分析命令,则此表中的统计信息可能不准确,查询计划器可能会做出错误的决定,从而降低系统性能。另一种策略是查询规划器为每个查询(包括选择、插入、更新和删除)生成这些统计信息。这种方法将允许查询规划器拥有尽可能最新的统计信息。

为什么 postgres 总是依赖 pg_class?

最佳答案

pg_class 不包含规划器所需的所有统计信息,它仅包含有关表结构的信息。 analyze 命令生成的统计信息包含有关每列中存在的值的信息,因此在执行如下命令时:

SELECT * FROM tab WHERE cname = "pg";

计划者知道表中有多少行以及 cname 列中有多少行的值为“pg”。 pg_class 中不存在这些信息。

PostgreSQL 的另一个不错的特性是 autovacuum,在 99,9999% 的情况下应该启用它,以便数据库在某些(可以在配置文件中定义)行数发生变化时立即实现统计信息。这最大限度地减少了由于错误的表统计信息而导致执行计划错误的可能性。

关于postgreSQL - pg_class 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658245/

相关文章:

postgresql - GROUP BY 在 Postgres 中的表现

java - JDBC 中的批量插入 - 单个事务会慢多少?

sql - 如何在 Postgres 中查询以按创建月份对记录进行分组? ( :created_at datetime column)

postgresql - 如何在 Nginx 中使用 Postgres 和静态文件操作

postgresql - Postgres : Distinct but only for one column

Postgresql:将日期字符串 '2016-01-01 00:00:00' 转换为具有特定时区的日期时间

javascript - bookshelf.js 中的多表关系

ruby-on-rails - 以 rails 形式存储和检索 postgres 嵌套的 JSONB 数据类型

sql - Postgres 根据其他查询的结果更新设置值

postgresql - 我对 PostgreSQL 有点陌生,需要如何构建复杂的查询