在 PostgreSql 中重建索引

Reindexing in PostgreSql

如何确定 Postgres 数据库中所有索引需要重新编制索引?我需要安排一个作业来重新编制 Postgres 中的索引索引,我应该多久 运行 一次?

索引的统计信息收集可以处理自动清理部分的自动分析,还是我们应该 运行 单独处理?

您通常不需要重新索引 PostgreSQL 索引。随着时间的推移,它们会变得有些碎片化,但这是正常的。

也就是说,您可以使用 pgstattuple 扩展中的 pgstatindex 函数来检查索引:

CREATE EXTENSION pgstattuple;

SELECT avg_leaf_density FROM pgstatindex('items_1_pkey');

 avg_leaf_density 
------------------
            88.92
(1 row)

那个索引是完全密集的,密度与fillfactor(90)差不多。如果该值低于 20 左右,请考虑重建索引。