diff --git a/mysql/mysql文档/mysql_mvcc_impl.md b/mysql/mysql文档/mysql_mvcc_impl.md index 34a6df0..3e5af5d 100644 --- a/mysql/mysql文档/mysql_mvcc_impl.md +++ b/mysql/mysql文档/mysql_mvcc_impl.md @@ -61,4 +61,11 @@ purge操作在后台由一个或多个purge threads执行。purge threads的数 `innodb_max_purge_lag`的默认值为0,代表默认不存在max purge lag。 +## Multi-Versioning and Secondary Indexes +在mvcc中,对待聚簇索引和辅助索引的方式不同。在聚簇索引中,record中的列是`update in-place`,并且其hidden system columns指向undo log records,通过undo log records可以还原数据的先前版本。 +但是,辅助索引不包含hidden system columns,并且对于辅助索引的更新也不是update in-place。 + +当辅助索引的column被更新时,旧的辅助索引记录将会被标记为delete marked,并且插入新的辅助索引记录。`delete marked index records`最终会被purge。 + +当辅助索引中的index record被`delete marked`或`辅助索引页被newer transaction(更新的事务)更新时,innodb将会在聚簇索引中查询记录`。