在某些情况下,值得周期性地使用 REINDEX 命令或一系列单独的重建步骤, 来重建索引。
B-树索引中已经完全变空的索引页会被回收以供重用。不过,仍然可能出现空间利用低效: 如果某个页面上的索引键除了少数几个之外都被删除,该页面仍会保留分配。因此, 在一种使用模式下,如果每个键范围中的大多数但不是全部键最终都被删除, 就会出现糟糕的空间利用。对于这种使用模式,建议定期重建索引。
对于非 B-树索引中的膨胀潜力,人们还没有做过充分研究。 在使用任何非 B-树索引类型时,定期监控索引的物理大小是个好主意。
此外,对 B-树索引而言,新近构建的索引比已经多次更新过的索引在访问时稍快一些, 因为在新建的索引中,逻辑上相邻的页面通常在物理上也彼此相邻。 (这一考虑不适用于非 B-树索引。)即便只是为了提高访问速度, 周期性重建索引也可能是值得的。
REINDEX 在所有情况下都可以安全而容易地使用。 默认情况下,该命令需要一个 ACCESS EXCLUSIVE 锁, 因此通常更倾向于使用其 CONCURRENTLY 选项执行, 那只需要一个 SHARE UPDATE EXCLUSIVE 锁。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。