首页 > 解决方案 > postgresql 重建索引和重新创建索引有什么区别,哪个更好?

问题描述

我有一个索引大小太大(大约 2G)的表。当我将数据库恢复到虚拟机时,大小只有 200M,所以我需要重建/重新创建索引,我可能会在线执行此操作。

重新构建(reindex)和重新创建索引有什么区别,我在网上做的时候哪个更好?特别是,哪个选项允许在操作期间查询数据库?

标签: postgresqlpostgresql-9.3

解决方案


REINDEX命令需要一个独占表锁,这意味着它将停止对表的任何访问,直到命令完成。如果您能负担得起这种维护窗口,那就太好了。

在线重建的替代方法是使用 创建一个新索引CREATE INDEX CONCURRENTLY,然后删除旧索引。这将需要更长的时间才能完成,但允许在重建索引时访问表。


推荐阅读