Postgresql 中文操作指南

25.2. Routine Reindexing #

在某些情况下,值得使用 REINDEX 命令或一系列单独的重建步骤定期重建索引。

已变得完全空的 B 树索引页将被收回以供重新使用。但是,空间仍然有可能使用效率低下:如果一个页面上的所有除少数几个索引键之外的键都被删除,则页面仍然分配。因此,最终删除每个范围中大多数但不全部的键的用法模式将导致空间利用不佳。对于这样的用法模式,建议定期重新索引。

尚未很好地研究非 B 树索引中膨胀的可能性。在使用任何非 B 树索引类型时,定期监视索引的物理大小是一个好主意。

另外,对于 B 树索引,新构建的索引比已经多次更新的索引访问速度稍快,因为在新建索引中,逻辑上相邻的页面通常也在物理上相邻。(此考虑不适用于非 B 树索引。)定期重新索引以提高访问速度可能是值得的。

REINDEX 在所有情况下都可以安全轻松地使用。默认情况下,此命令需要 ACCESS EXCLUSIVE 锁,因此,通常最好使用其 CONCURRENTLY 选项执行该命令,该选项只需要 SHARE UPDATE EXCLUSIVE 锁。