数据库面试题
3.2 多版本和二级索引
这部分直接从官网扒下来做了解,可以不用看,不影响后面的阅读,读了才有影响。
InnoDB多版本并发控制(MVCC)对二级索引的处理不同于聚集索引。聚集索引中的记录会就地更新,其隐藏的系统列指向撤消日志项,可以从中重建早期版本的记录。与聚集索引记录不同,二级索引记录不包含隐藏的系统列,也不会就地更新。
更新辅助索引列时,旧的辅助索引记录将被删除标记,新记录将被插入,并最终清除已删除标记的记录。当二级索引记录被删除标记或二级索引页被更新的事务更新时,InnoDB会在聚集索引中查找数据库记录。在聚集索引中,检查记录的DB_TRX_ID,如果在读取事务启动后修改了记录,则从撤消日志中检索记录的正确版本。
如果二级索引记录被标记为删除,或者二级索引页被更新的事务更新,则不使用覆盖索引技术。InnoDB没有从索引结构返回值,而是在聚集索引中查找记录。
但是,如果启用了索引条件下推(ICP)优化,并且部分WHERE条件只能使用索引中的字段进行计算,那么MySQL服务器仍然会将WHERE条件的这一部分向下推送到存储引擎,在存储引擎中使用索引对其进行评估。如果找不到匹配的记录,将避免聚集索引查找。如果找到匹配的记录,即使在删除标记的记录中,InnoDB也会在聚集索引中查找该记录。 ———————————————— 版权声明:本文为CSDN博主「董德生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_30738065/article/details/113294972