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