インデックス自体は、返される前に剪定できる両方のレコードを持つことができます。したがって、この場合、レコードを取得するために ondex だけを使用することはできません (MVCC は PostGres によって行われます)。InnoDB/Oracle は、データ/インデックスの 1 つのバージョンのみを保持し、元に戻すセクションを使用して、古いトランザクションの古いバージョンを再構築します。
定期的にコピーが (PostGres で) ガベージ コレクションされ、Oracle/InnoDB には、トランザクションが中止/コミットされたときに再利用される元に戻すセクションがあるため、DB が一般的に使用されている場合、コピーが多すぎることはありません。実行時間の長いトランザクションが多すぎると、明らかに問題が発生します。
インデックスは、アクセスを高速化し、すべてのレコードに触れることなく、より速くレコードを見つけるためのものです。インデックスは最初のパスで正確である必要はありません。タプルを調べて、特定のトランザクションで有効かどうかを確認する必要がある場合があります (PostGres のように) )。racle または InnoDB でさえインデックスがバージョン管理されているため、インデックス自体からデータを取得できます。
これを読んで、MVCC を実装する 2 つの方法 (PresGres と Oracle/InnoDB) の詳細を理解してください。
InnoDB MVCCとここのコメントも役に立ちます
PS: 私は mysql/oracle/postgres 内部の専門家ではなく、まだ仕組みを学んでいます。