- 索引本身可以有两个记录,这些记录可以在返回之前被删除。因此,在这种情况下,ondex不能单独用于获取记录(由PostGres完成的MVCC )。InnoDB/Oracle只保留一个版本的数据/索引,并使用undo部分为旧事务重新构建旧版本。
- 在通常使用DB时,您不会有太多的副本,因为定期地,副本将被垃圾收集(在PostGres中),而Oracle将有撤销部分,在事务中止/提交时将被重用。如果您有太多的长时间运行的事务,显然您会有问题。
- 索引是为了加快访问速度,更快地找到记录,不需要触摸所有这些,索引在第一次通过时就不需要准确,您可能需要查看元组来查看它在一个特定事务中是否有效(比如在PostGres中)。racle或InnoDB甚至索引都是版本化的,所以您可以从索引本身获取数据。
阅读这篇文章详细介绍了实现PresGres和Oracle/InnoDB的两种方法。
InnoDB MVCC和这里的评论也很有用
PS:我不是mysql/oracle/postgres内部专家,我仍然在学习事情是如何工作的。