MySQL存儲引擎-InnoDB&MyISAM

前言

存儲引擎在MySQL的邏輯架構中位於第三層,負責MySQL中的數據的存儲和提取。MySQL存儲引擎有很多,不同的存儲引擎保存數據和索引的方式是不同的。每一種存儲引擎都有它的優勢和劣勢,本文只討論最常見的InnoDB和MyISAM兩種存儲引擎進行討論。
在這裏插入圖片描述

InnoDB存儲引擎

InnoDB是默認的事務型存儲引擎,也是最重要,使用最廣泛的存儲引擎。在沒有特殊情況下,一般優先使用InnoDB存儲引擎。

1. 數據存儲形式:

使用InnoDB時,會將數據表分爲.frm 和 idb兩個文件進行存儲。
在這裏插入圖片描述

2、鎖的粒度

InnoDB採用MVCC(多版本併發控制)來支持高併發,InnoDB實現了四個隔離級別,默認級別是REPETABLE READ,並通過間隙鎖策略防止幻讀的出現。它的鎖粒度是行鎖。

3、事務

InnoDB是典型的事務型存儲引擎,並且通過一些機制和工具,支持真正的熱備份。

4、數據的存儲特點

InnoDB表是基於聚簇索引(另一篇博客有介紹)建立的,聚簇索引對主鍵的查詢有很高的性能,不過他的二級索引(非主鍵索引)必須包含主鍵列,索引其他的索引會很大。
更深入的瞭解: MySQL索引實現原理分析

MyISAM存儲引擎

1、數據存儲形式

MyISAM採用的是索引與數據分離的形式,將數據保存在三個文件中.frm.MYD,.MYIs。
在這裏插入圖片描述

2、鎖的粒度

MyISAM不支持行鎖,所以讀取時對錶加上共享鎖,在寫入是對錶加上排他鎖。由於是對整張表加鎖,相比InnoDB,在併發寫入時效率很低。

3、事務

MyISAM不支持事務。

4、數據的存儲特點

MyISAM是基於非聚簇索引進行存儲的。
更深入的瞭解: MySQL索引實現原理分析

5、其他

MyISAM提供了大量的特性,包括全文索引,壓縮,空間函數,延遲更新索引鍵等。

進行壓縮後的表是不能進行修改的,但是壓縮表可以極大減少磁盤佔用空間,因此也可以減少磁盤IO,從而提供查詢性能。

全文索引,是一種基於分詞創建的索引,可以支持複雜的查詢。

延遲更新索引鍵,不會將更新的索引數據立即寫入到磁盤,而是會寫到內存中的緩衝區中,只有在清除緩衝區時候纔會將對應的索引寫入磁盤,這種方式大大提升了寫入性能。

三、對比與選擇

兩種存儲引擎各有各的有點,MyISAM專注性能,InnoDB專注事務。兩者最大的區別就是InnoDB支持事務,和行鎖。

在這裏插入圖片描述
如何在兩種存儲引擎中進行選擇?

① 是否有事務操作?有,InnoDB。
②是否存儲併發修改?有,InnoDB。
③是否追求快速查詢,且數據修改較少?是,MyISAM。
④是否使用全文索引?如果不引用第三方框架,可以選擇MyISAM,但是可以選用第三方框架和InnDB效率會更高。

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