某些情况下,使用 REINDEX 命令或一系列个人重新编制步骤定期重新编制索引是有价值的。
已变得完全空旷的 B 树索引页面被回收以便重新使用。但是,仍然可能无效地使用空间:如果页面上的所有索引键只剩下一些已被删除,则该页面仍被分配。因此,最终可能删除每个范围中的大多数(但不是全部)键的使用模式不能有效地使用空间。对于此类使用模式,建议定期重新索引。
对非 B 树索引中膨胀的可能性尚未得到充分研究。在使用任何非 B 树索引类型时,定期监控该索引的物理大小是个好主意。
另外,对于 B 树索引,新构建的索引访问比已多次更新的索引稍快,因为逻辑相邻的页面在新构建的索引中也通常是物理相邻的。(此注意事项不适用于非 B 树索引。)仅为了提高访问速度,定期重新索引也可能是有价值的。
REINDEX 在所有情况下都可以安全、轻松地使用。默认情况下,此命令需要一个 ACCESS EXCLUSIVE
锁,因此通常倾向于使用其 CONCURRENTLY
选项执行它(它只需要一个 SHARE UPDATE EXCLUSIVE
锁)。