创建索引后是否有必要对表进行分析?

Kol*_*llp 4 postgresql index vacuum

在我的交易中,我正在创建一个临时表:

create temporary table x on commit drop as
select ...
Run Code Online (Sandbox Code Playgroud)

我还在该表上添加了一个索引:

create index on x(some_column);
Run Code Online (Sandbox Code Playgroud)

现在有必要analyze在那个桌子上跑吗?或者我是否只需要索引创建分析表的更新/删除?

换句话说,我的问题是:索引的创建是否已经意味着analyze执行?

Lau*_*lbe 5

如果索引只是像您的情况一样位于简单的列上,则在创建索引后不需要ANALYZE表。
这是因为无论该列是否有索引,总是会收集有关表列的值分布的统计信息。

但是,如果您正在索引类似upper(some_column)的表达式(CAST(some_column AS date))则应ANALYZE在创建索引后运行
然后 PostgreSQL 还将收集有关索引表达式的值分布的统计信息。这会在 autoanalyze 运行时自动发生,但最好在创建索引后立即手动执行此操作,以便立即获得良好的统计信息。