DROP INDEX 后是否需要分析表?

alT*_*Tus 5 postgresql index

在我们的 postgres 数据库中,我们历史上有许多类似的索引(例如is_deleted布尔值),它们的选择性值非常差。更糟糕的是,有时查询计划器会中断并且 postgres 开始使用其中的一些而不是更高效的索引,因此我们需要ANALYZE手动调用以修复性能,因此我们决定删除其中的大部分。

ANALYZE删除索引后需要为每个表调用吗?

根据是否有必要在创建索引后分析表中的答案postgres 在没有索引相关信息的情况下收集有关表中实际值的统计信息(对于简单索引),但我在文档中找不到证据。

Erw*_*ter 7

不,这是没有必要的。主表上的统计信息完全不受索引影响。

需要注意的一件事:表达式索引引入了新的“派生”列,Postgres 为这些列收集单独的统计信息。删除这样的索引也会删除特殊的统计信息——这可能会导致不同的查询计划,除了索引已经消失的事实。

由于您提到了boolean列上的索引:那些几乎没有意义,删除它们是个好主意。布尔列通常仅作为部分索引中的条件才有意义。手册中有一个例子。