在某些情况下,定期使用 REINDEX 命令或一系列单独的重建步骤来重建索引是值得的。
已经完全为空的 B 树索引页会被回收以重新使用。但是,仍然存在空间使用效率低下的可能性:如果一个页面上除了少数几个索引键之外的所有键都被删除,则该页面仍然被分配。因此,如果每个范围内的大部分(但不是全部)键最终都被删除,则会看到空间使用效率低下。对于这种使用模式,建议定期重建索引。
非 B 树索引中膨胀的可能性尚未得到充分研究。使用任何非 B 树索引类型时,定期监控索引的物理大小是一个好主意。
此外,对于 B 树索引,新构建的索引比多次更新的索引访问速度稍快,因为逻辑上相邻的页面通常在新构建的索引中也是物理上相邻的。(此考虑不适用于非 B 树索引。)定期重建索引可能仅仅是为了提高访问速度。
REINDEX 在所有情况下都可以安全且轻松地使用。此命令默认需要一个 ACCESS EXCLUSIVE
锁,因此通常最好使用其 CONCURRENTLY
选项执行它,该选项只需要一个 SHARE UPDATE EXCLUSIVE
锁。
如果您发现文档中有任何不正确、与您使用特定功能的体验不符或需要进一步澄清的地方,请使用此表单报告文档问题。