1. 程式人生 > >Mysql InnoDB讀書筆記--關鍵特性

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儲存引擎。