postgresql重建索引和重建索引之间有什么区别,哪个更好?

时间:2018-09-14 03:41:58

标签: postgresql postgresql-9.3

我有一张表,索引大小太大(约2G)。将数据库还原到VM时,大小只有200M,因此我需要重建/重新创建索引,并且可能会在线进行。

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

2 个答案:

答案 0 :(得分:2)

REINDEX命令requires an exclusive table lock,这意味着它将停止对该表的所有访问,直到该命令完成。如果您能负担得起这种维护时段,那就太好了。

联机重建的另一种方法是使用CREATE INDEX CONCURRENTLY创建一个新索引,然后删除旧索引。这将花费更长的时间才能完成,但是允许在重建索引的同时访问表。

答案 1 :(得分:1)

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/