Sql >这可能是再次检查自动真空设置的好时机,因为其他地方的统计数据也可能非常过时,但这还远远不能确定。特别是,基于成本的真空设置有一些默认设置,有时会使真空无法完全跟上进度。

Sql >这可能是再次检查自动真空设置的好时机,因为其他地方的统计数据也可能非常过时,但这还远远不能确定。特别是,基于成本的真空设置有一些默认设置,有时会使真空无法完全跟上进度。,sql,database,postgresql,Sql,Database,Postgresql,以下是我认为最可能的解释 只有当返回非常少量的行时,您的索引才是有用的(BTW,我不喜欢为此原因而索引Boo--您可能会考虑使用部分索引来代替,或者甚至添加一个Admin是真的,因为这将使您的索引只适用于那些无论如何都可以使用的情况)。 如果要检索表中超过10%的页面(iirc),规划人员可能会选择大量顺序磁盘I/O,而不是少量随机磁盘I/O,因为这样您就不必等待盘片转动。搜索速度是一个很大的问题,PostgreSQL将试图平衡搜索速度与从关系中检索的实际数据量 您收集的统计数据表明,该表要么比

以下是我认为最可能的解释

只有当返回非常少量的行时,您的索引才是有用的(BTW,我不喜欢为此原因而索引Boo--您可能会考虑使用部分索引来代替,或者甚至添加一个Admin是真的,因为这将使您的索引只适用于那些无论如何都可以使用的情况)。 如果要检索表中超过10%的页面(iirc),规划人员可能会选择大量顺序磁盘I/O,而不是少量随机磁盘I/O,因为这样您就不必等待盘片转动。搜索速度是一个很大的问题,PostgreSQL将试图平衡搜索速度与从关系中检索的实际数据量

您收集的统计数据表明,该表要么比原来的表小,要么作为用户的一部分,管理员比您多,因此计划员使用了错误的信息来做出决策

真空分析做三件事。首先,它冻结对所有事务可见的元组,这样就不存在事务概括的问题。然后,它将对任何事务可见的元组分配为可用空间。这两项都没有影响到您的问题。然而,第三个是它分析表并收集表上的统计数据。请记住,这是一个随机抽样,因此有时可能会关闭。我的猜测是,在上一次运行中,它抓住了拥有大量管理员的页面,因此大大高估了系统管理员的数量


这可能是再次检查自动真空设置的好时机,因为其他地方的统计数据也可能非常过时,但这还远远不能确定。特别是,基于成本的真空设置有默认设置,有时会使真空无法完全跟上。感谢链接,有什么想法可以解释为什么我打电话来分析查询是不够的吗?实际上,
analyze
纠正了问题<代码>真空分析恰好同时执行这两项操作。另外需要注意的是,
EXPLAIN ANALYZE
除了EXPLAIN所做的之外,不会对表进行任何分析。它所做的是运行查询并与成本估算进行比较。感谢您提供的链接,关于我调用分析查询的功能不足的原因,您有什么想法吗?实际上
analyze
纠正了这个问题<代码>真空分析恰好同时执行这两项操作。另外需要注意的是,
EXPLAIN ANALYZE
除了EXPLAIN所做的之外,不会对表进行任何分析。它所做的是运行查询并与成本估算进行比较。只有一件事。如果规划者没有使用其他索引,那么在这种情况下就不会使用该索引。不过,我确实注意到,对于bools,部分索引是一种很好的做法。只有一件事。如果规划者没有使用其他索引,那么在这种情况下就不会使用该索引。然而,我确实注意到,对于bools,部分索引是一种很好的做法。
EXPLAIN SELECT * FROM user WHERE admin IS TRUE;

Index Scan using index_user_on_admin on user (cost=0.00..9.14 rows=165 width=3658)
Index Cond: (admin = true)
Filter: (admin IS TRUE)
Seq Scan on user  (cost=0.00..620794.93 rows=4966489 width=3871)
Filter: (admin IS TRUE)
CREATE INDEX admin_users_ix ON users (admin)
    WHERE admin IS TRUE;;