2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 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

24.2. 例行重新索引 #

在某些情况下,使用 REINDEX 命令或一系列单独的重建步骤定期重建索引是值得的。

B-tree 索引中完全为空的页面会被回收以供重用。然而,仍然可能存在空间使用效率不高的情况:如果一个页面上的所有索引键(除了少数几个)都被删除了,该页面仍然会被分配。因此,如果一个使用模式是最终删除每个范围中的大多数键,但不是全部,那么空间使用效率会很低。对于这种使用模式,建议定期重新索引。

非 B-tree 索引的膨胀可能性尚未得到充分研究。在使用任何非 B-tree 索引类型时,定期监控索引的物理大小是一个好主意。

此外,对于 B-tree 索引,一个新构建的索引比一个被多次更新过的索引访问速度稍快,因为在新的索引中,逻辑上相邻的页面通常也物理上相邻。(这个考虑不适用于非 B-tree 索引。)定期重新索引可能值得,仅仅是为了提高访问速度。

REINDEX 在所有情况下都可以安全轻松地使用。此命令默认需要一个 ACCESS EXCLUSIVE 锁,因此通常更倾向于使用其 CONCURRENTLY 选项来执行,该选项只需要一个 SHARE UPDATE EXCLUSIVE 锁。

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的实际体验不符,或者需要进一步澄清,请使用 此表单 报告文档问题。