innodb如何处理对innodb行记录的update
2011-12-29 17:38
288 查看
今天有同事提到一篇博客:http://blogs.innodb.com/wp/2010/09/mysql-5-5-innodb-change-buffering/
里面提到:
当更新非聚集索引上记录 和 聚集索引上的主键时,是标记删除,然后插入新的记录
当更新聚集索引上的非主键列时,是updated-in-place,也就是说原地修改,不会插入新记录。
之前一直以为都是以标记删除作处理的,翻了下代码。找到两个函数:
btr_cur_del_mark_set_sec_rec 对非聚集索引上的记录进行标记删除
btr_cur_del_mark_set_clust_rec 对聚集索引上的记录进行标记删除
证明的过程很简单,就是设置两个断点,然后更新不同的索引列来证明,过程不多说了,结果和那篇博客里提到的很吻合。
一直认为正确的观点其实是错误的,得出一个结论:任何真理都可以从代码里求证……
里面提到:
当更新非聚集索引上记录 和 聚集索引上的主键时,是标记删除,然后插入新的记录
当更新聚集索引上的非主键列时,是updated-in-place,也就是说原地修改,不会插入新记录。
之前一直以为都是以标记删除作处理的,翻了下代码。找到两个函数:
btr_cur_del_mark_set_sec_rec 对非聚集索引上的记录进行标记删除
btr_cur_del_mark_set_clust_rec 对聚集索引上的记录进行标记删除
证明的过程很简单,就是设置两个断点,然后更新不同的索引列来证明,过程不多说了,结果和那篇博客里提到的很吻合。
一直认为正确的观点其实是错误的,得出一个结论:任何真理都可以从代码里求证……
相关文章推荐
- 如何传值给存储过程中的In条件?(根据多个id查找对应的记录的处理)
- UPDATE 时, 如何避免数据定位处理被阻塞
- 我是如何在SQL Server中处理每天四亿三千万记录的
- 我是如何在SQLServer中处理每天四亿三千万记录的
- MySql如何用一句sql语句对某个字段进行处理后,再进行对字段进行修改?即update和select如何混合写?
- 我是如何在SQLServer中处理每天四亿三千万记录的
- MySQL Help 答朋友问:5000W记录的Innodb表如何快速的去重复数据
- 花生壳已经激活了,但是在诊断显示“花生壳未激活,设置A记录”如何处理
- UPDATE 时, 如何避免数据定位处理被阻塞
- UPDATE 时, 如何避免数据定位处理被阻塞
- 我是如何在SQL Server中处理每天四亿三千万记录的
- 如何在SQLServer中处理每天四亿三千万记录的
- 我是如何在SQLServer中处理每天四亿三千万记录的
- makefile学习记录:空字符和""," "区别以及变量定义中多余的空格如何处理
- 如何判断数据库中存在已有记录并处理?
- UPDATE 时, 如何避免数据定位处理被阻塞
- UPDATE 时, 如何避免数据定位处理被阻塞
- Exadata混合列压缩如何处理INSERT和UPDATE
- 我是如何在SQLServer中处理每天四亿三千万记录的