我有一个索引大小太大的表(约2G)。当我将数据库恢复到VM时,大小只有200M,所以我需要重建/重新创建索引,我可能会在线完成。
重建(reindex)和重新创建索引之间的区别是什么,当我在线进行时哪个更好?特别是,哪个选项允许在操作期间查询DB?
REINDEX
命令requires an exclusive table lock,这意味着它将停止对表的任何访问,直到命令完成。如果您能负担得起这种维护窗口,那就完全没问题了。
在线重建的替代方法是使用CREATE INDEX CONCURRENTLY
创建一个新索引,然后删除旧索引。这将花费更长的时间来完成,但允许在重建索引时访问表。