PostgreSQL索引如何处理MVCC

时间:2017-04-24 07:07:11

标签: postgresql indexing mvcc

在PostgreSQL中,元组的每次更新都会创建新的元组版本。所以在一段时间内可能会有很多版本的相同元组和不同的事务可以看到不同版本的元组(使用可见性规则)

索引在交易完成前更新。这如何与SI一起使用?

因此,当一个事务更新元组时,索引条目更新为指向新版本的元组?

1 个答案:

答案 0 :(得分:8)

由于PostgreSQL通过同时保留表中一行的多个版本来实现MVCC,因此对于单行的不同版本,它也保留多个索引条目(有时可以通过<如果在更新期间未修改索引条目并且更新的行与原始版本位于同一个表块中,则em>仅堆加元组。

可见性信息不存储在索引中,因此要在索引扫描期间找到正确的行版本,必须检查所有这些索引条目的表条目(如果已知索引块,则可以避免这种情况。仅包含每个人都可以看到的条目;这是仅索引扫描)。

在autovacuum期间,旧索引条目与旧表条目一起被删除。