postgresql rebuild index和recreate index有什么区别,哪个更好?

What is the difference between postgresql rebuild index and recreate index, which one is better?

我有一个 table 索引太大(大约 2G)。当我将数据库还原到 VM 时,大小只有 200M,所以我需要 rebuild/recreate 索引,我可能会在线执行此操作。

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

REINDEX 命令 requires an exclusive table lock,这意味着它将停止对 table 的任何访问,直到命令完成。如果您能负担得起这种维护费用 window,那就完全没问题了。

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

Postgres 12 添加了一个 REINDEX INDEX CONCURRENTLY 命令,它可以满足您的需求。 https://paquier.xyz/postgresql-2/postgres-12-reindex-concurrently/ https://www.depesz.com/2019/03/29/waiting-for-postgresql-12-reindex-concurrently/