我有一张表,索引大小太大了(约为2G)。当我把数据库恢复到VM时,大小只有200M,因此我需要重建/重新创建索引,而且我可能会在线上执行此操作。
重建索引和重新创建索引有什么区别,在线执行时哪个更好?特别是哪个选项允许在操作期间查询数据库?
我有一张表,索引大小太大了(约为2G)。当我把数据库恢复到VM时,大小只有200M,因此我需要重建/重新创建索引,而且我可能会在线上执行此操作。
重建索引和重新创建索引有什么区别,在线执行时哪个更好?特别是哪个选项允许在操作期间查询数据库?
REINDEX
命令需要一个独占的表锁,这意味着它将阻塞对表的任何访问,直到命令完成。如果您能承受这种维护窗口,那么这是完全可以的。CREATE INDEX CONCURRENTLY
创建一个新索引,然后删除旧索引。这将需要更长的时间来完成,但允许在重建索引时访问表。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/