↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
历史版本。 PostgreSQL 8.1 已结束支持。 请参阅 当前版本手册.

22.2. 日常重建索引 #

在某些情况下,值得周期性地使用REINDEX命令来重建索引。

在 7.4 之前的 PostgreSQL 版本中,由于 B-树索引缺乏内部空间回收机制,经常需要定期重建索引以避免“索引膨胀”。任何索引键范围随时间推移而变化的情况——例如,在一个最终会删除旧条目的表上按时间戳建的索引——都会导致膨胀,因为键范围中不再需要的部分所对应的索引页不会被回收以供重用。随着时间的推移,索引大小可能会变得远大于其中有用的数据量。

在 PostgreSQL 7.4 及之后的版本中,已经完全变空的索引页会被回收以供重用。不过,仍然可能出现空间利用低效:如果某个页面上的索引键除了少数几个之外都被删除,该页面仍会保留分配。因此,在一种使用模式下,如果每个键范围中的大多数但不是全部键最终都被删除,就会出现糟糕的空间利用。膨胀的可能性不是无限的——最坏情况下每个索引页只有一个键——但对于有这种使用模式的索引,定期安排重建索引仍可能是值得的。

对于非 B-树索引中的膨胀潜力,人们还没有做过充分研究。在使用任何非 B-树索引类型时,定期监控索引的物理大小是个好主意。

此外,对 B-树索引而言,新近构建的索引比已经多次更新过的索引在访问时稍快一些,因为在新建的索引中,逻辑上相邻的页面通常在物理上也彼此相邻。(这一考虑不适用于非 B-树索引。)即便只是为了提高访问速度,周期性重建索引也可能是值得的。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.