问候溢出者,
- 据我了解(我希望我不正确)对索引的更改不能被 MVCCed。
- 我想知道大记录是否也是如此,因为副本可能很昂贵。
- 由于记录是通过索引访问的(通常),MVCC 如何有效?
- 例如,索引是否跟踪不同版本的 MVCCed 记录?
最近有什么关于这个主题的好读物吗?非常感谢 !
问候
索引本身可以同时具有在返回之前可以修剪的记录。所以在这种情况下,不能单独使用 ondex 来获取记录(由 PostGres 完成的 MVCC)。InnoDB/Oracle 只保留一个版本的数据/索引,并使用 undo 部分为旧事务重建旧版本。
通常使用 DB 时,您不会有太多副本,因为定期副本将被垃圾收集(在 PostGres 中),并且 Oracle/InnoDB 将具有撤消部分,这些部分将在事务中止/提交时重用。如果您有太多长时间运行的事务,显然您会遇到问题。
索引是为了加快访问速度,更快地找到记录,无需全部触摸,索引在第一遍不需要准确,您可能需要查看元组以查看其在特定事务中是否有效(如 PostGres )。racle 或 InnoDB 甚至索引都是版本化的,因此您可以从索引本身获取数据。
阅读本文以详细了解实现 MVCC 的两种方法(PresGres 和 Oracle/InnoDB)。
InnoDB MVCC和这里的评论也很有用
PS:我不是 mysql/oracle/postgres 内部的专家,仍在学习事情是如何工作的。