我想知道创建索引后 CREATE INDEX 和 CREATE INDEX CONCURRENTLY(如果有)之间有什么区别。我一直在和一位同事讨论他们的工作方式。
我的理解是,CREATE INDEX 对表进行完全锁定以快速构建索引,从而导致停机时间,但对于 CREATE INDEX CONCURRENTLY 仅对表进行部分锁定。这意味着当表有写入时,会为每个新事务/插入计算索引,并且只要没有事务/插入发生,它就会“回填”或处理已存在数据的索引。一旦这个“回填”过程完成,CREATE INDEX 和 CREATE INDEX CONCURRENTLY 之间就没有严格的区别。
我同事的理解是,CREATE INDEX CONCURRENTLY 的行为有所不同,即使在“回填过程”完成后,CREATE INDEX CONCURRENTLY 的写入负载强度仍然较低。
有人可以让我们更好地了解索引创建的工作原理吗?什么时候我们可以说索引已经创建了?每当插入数据时索引创建完成后会发生什么?使用 CONCURRENTLY 与不使用 CONCURRENTLY 时索引构建完成后的计算是否有差异?