PostgreSQL重建索引和重新创建索引有什么区别?哪个更好?

8

我有一张表,索引大小太大了(约为2G)。当我把数据库恢复到VM时,大小只有200M,因此我需要重建/重新创建索引,而且我可能会在线上执行此操作。

重建索引和重新创建索引有什么区别,在线执行时哪个更好?特别是哪个选项允许在操作期间查询数据库?

2个回答

8
REINDEX 命令需要一个独占的表锁,这意味着它将阻塞对表的任何访问,直到命令完成。如果您能承受这种维护窗口,那么这是完全可以的。
在线重建的替代方法是使用CREATE INDEX CONCURRENTLY创建一个新索引,然后删除旧索引。这将需要更长的时间来完成,但允许在重建索引时访问表。

2
谢谢你的帮助。我发现有人说“Postgresql支持在同一字段上创建两个索引,因此我们可以使用concurrently创建一个新索引,然后删除旧索引”,这是一个好的解决方案吗? - joker_zhu
那非常好,我建议这么做。我已经更新了我的答案来反映这一点。 - user554538

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接