MyISAM和InnoDB存儲引擎的特點

Mysql區別於其他數據庫的一個重要特點是其插件式的表存儲引擎,注意,存儲引擎是基於表的,而不是基於數據庫。

MyISAM

特性

 

不支持事務:MyISAM存儲引擎不支持事務,所以對事務有要求的業務場景不能使用

表級鎖定:其鎖定機制是表級索引,這雖然可以讓鎖定的實現成本很小但是也同時大大降低了其併發性能

讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,MyISAM還會在讀取的時候阻塞寫入,但讀本身並不會阻塞另外的讀

只會緩存索引:MyISAM可以通過key_buffer緩存以大大提高訪問性能減少磁盤IO,但是這個緩存區只會緩存索引,而不會緩存數據

適用場景

不需要事務支持(不支持)

併發相對較低(鎖定機制問題)

數據修改相對較少(阻塞問題)

以讀爲主

數據一致性要求不是非常高

InnoDB

特性

具有較好的事務支持:支持4個事務隔離級別,支持多版本讀

行級鎖定:通過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響

讀寫阻塞與事務隔離級別相關

具有非常高效的緩存特性:能緩存索引,也能緩存數據

整個表和主鍵以Cluster方式存儲,組成一顆平衡樹

所有Secondary Index都會保存主鍵信息

與myisam相比Innodb存儲引擎支持事務,支持行鎖和外鍵,支持非鎖定讀(默認讀操作不會產生鎖)。還可以通過MVCC(多版本併發控制)來獲得高併發性,實現了標準的4中隔離級別,默認爲Repeatable read級別。還通過next—key Locking的策略來避免幻讀(phantom)現象的產生,Innodb還支持插入緩存(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、預讀(read ahead)等功能。

Innodb中每張表的存儲都是按照主鍵的順序進行存放的,如果沒有定義主鍵,Innodb會爲每一行生成一個6字節的ROW ID,以此作爲主鍵。

適用場景

需要事務支持(具有較好的事務特性)

行級鎖定對高併發有很好的適應能力,但需要確保查詢是通過索引完成

數據更新較爲頻繁的場景

數據一致性要求較高

硬件設備內存較大,可以利用InnoDB較好的緩存能力來提高內存利用率,儘可能減少磁盤 IO

Innodb的關鍵特性

插入緩衝(insert buffer)

在InnoDB中,若主鍵(插入聚集索引Primary Key)自增,那麼在頁中存儲時,會按主鍵順序的存放,所以數據是集中的,大部分在一頁中,這樣會減少磁盤的離散讀取,提高速度。
然而,當索引不唯一時,就需要使用輔助索引,而記錄按主鍵是順序的,對其他索引,如輔助索引,就不會是順序的,再插入時就會慢,尤其是大批數據插入時。
Insert Buffer 的設計思想是,當按輔助索引插入時先將記錄放在Insert Bufer中,然後再以一定頻率和情況進行insert buffer和輔助索引頁子節點的merge(合併)操作,將多個插入合併到一個操作中(因爲在一個索引頁中),大大提高了對於非聚集索引插入的性能。

兩次寫(double write)

在對緩衝池中的髒頁進行刷新時,並不是直接寫磁盤,而是先將髒頁寫入到內存中的doublewrite buffer中,然後再同步磁盤。如果操作系統在將頁寫入磁盤的過程中發生了崩潰,在恢復過程中,Innodb存儲引擎可以從共享表空間中的doublewrite中找到該頁的一個副本。將其複製到表空間文件,再應用重做日誌。

自適應哈希索引(adaptive hash index,AHI)

Innodb會監控對錶上各索引頁的查詢,如果觀察到建立哈希索引可以帶來速度上的提升,則建立哈希索引,稱之爲自適應哈希索引。AHI是通過緩衝池中的B+樹構造而來,因此建立的速度很快。Innodb會自動的根據訪問的頻率和模式來自動的爲某些熱點頁建立索引。

異步IO(asynchronous IO,AIO)

與AIO對應的是同步IO,即每進行一次IO操作都需要等待此次操作結束才能繼續接下來的操作。

AIO即是,用戶可以在發出一個IO請求後,立即再發出一個IO請求,當全部IO請求發送完畢之後,等待所有的IO操作的完成,這就是AIO。

刷新鄰接頁(flush neighbor page)

其工作原理爲:當刷新一個髒頁時,Innodb會檢測該頁所在區(extent)的所有頁,如果是髒頁,那麼一起刷新。這樣做的好處是,通過AIO可以將多個IO操作合併爲一個IO操作

innodb引擎的好處

a 更新密集的表。InnoDB存儲引擎特別適合處理多重併發的更新請求。

b 事務。InnoDB存儲引擎是支持事務的標準MySQL存儲引擎。

c 自動災難恢復。與其它存儲引擎不同,InnoDB表能夠自動從災難中恢復。

d 外鍵約束。MySQL支持外鍵的存儲引擎只有InnoDB。

e 支持自動增加列AUTO_INCREMENT屬性

f 熱備份

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