innodb如何處理對innodb行記錄的update

今天有同事提到一篇博客: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 對聚集索引上的記錄進行標記刪除


證明的過程很簡單,就是設置兩個斷點,然後更新不同的索引列來證明,過程不多說了,結果和那篇博客裏提到的很吻合。

一直認爲正確的觀點其實是錯誤的,得出一個結論:任何真理都可以從代碼裏求證……


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章