Mysql InnoDB讀書筆記--關鍵特性

InnoDB關鍵特性包括:

插入緩衝,兩次寫,自適應哈希索引


插入緩衝:

最令人激動的關鍵特性。Insert Buffer不僅在緩衝池中,同時也和數據頁一樣,是物理頁的一個組成部分

例如一張表,id爲自增主鍵,name爲non unique的key。插入時,數據也根據id無需隨機IO,而name這種非聚集的非唯一索引,則需要離散的訪問非聚集索引頁,插入性能降低。這是B+樹的特性所決定的必然結果--非聚集索引插入的離散型

插入緩衝則被開創性地用於解決這個問題:對於非聚集索引的插入或更新,並不是每次直接插入索引頁,先判斷這個索引頁是否在緩衝池,若在,則直接插入,若不在,則先放入插入緩衝,再以一定頻率執行插入緩衝和非聚集索引頁子節點的合併操作(merge),大大提升性能。

插入緩衝的必備條件:non unique+non primary的key


兩次寫:避免部分寫失效(partial page write),有些文件系統本身就提供了寫失效防範機制如ZFS,就不需要double write了。

提高可靠性。寫失效:正在寫一個頁16K,只寫了4K,宕機。可以用redo log恢復,但是redo log記錄的是對頁的物理操作,如偏移量222,寫‘aaa’。如果這個頁本身已損壞,則重做是沒有意義的。所以需要一個頁的副本,當寫入失效時,用這個副本來還原,然後才應用redo log。

流程:髒頁--memcpy--》double write buffer-->寫入共享表空間--》fsync同步,然後double write buffer 纔開始刷新到磁盤。


自適應哈希索引:

mysql的Heap存儲引擎默認使用hash索引。innodb提供了另一種實現方法。

InnoDB會監控對錶上索引的查找,如果觀察到建立哈希索引可以帶來速度的提升,則建立哈希索引,所以是自適應的。

InnoDB會自動根據訪問的頻率和模式來爲某些頁建立哈希索引。

哈希索引只能用來搜索等值的查詢,不能適用範圍查詢等。


InnoDB plugin=新版本的innoDB存儲引擎。

發佈了25 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章