MySQL存儲引擎的種類和使用場景

 

MySQL常用存儲引擎

1)InnoDB存儲引擎

從MySQL5.5版本之後,MySQL的默認內置存儲引擎已經是InnoDB了,他的主要特點有:

1. 災難恢復性比較好

2. 支持事務,默認的事務隔離級別爲可重複度,通過MVCC(併發版本控制)來實現的

3. 使用的鎖粒度爲行級鎖,可以支持更高的併發

4. 支持外鍵

5. 配合一些熱備工具可以支持在線熱備份

6. 在InnoDB中存在着緩衝管理,通過緩衝池,將索引和數據全部緩存起來,加快查詢的速度

7. 對於InnoDB類型的表,其數據的物理組織形式是聚簇表,所有的數據按照主鍵來組織,

    數據和索引放在一塊,都位於B+數的葉子節點上;

 

2)MyISAM存儲引擎

在5.5版本之前,MyISAM是MySQL的默認存儲引擎,該存儲引擎併發性差,不支持事務,所以使用場景比較少,

適合修改比較少,訪問比較多的表,主要特點爲:

1. 不支持事務

2. 不支持外鍵,如果強行增加外鍵,不會提示錯誤,只是外鍵不其作用

3. 對數據的查詢緩存只會緩存索引,不會像InnoDB一樣緩存數據,而且是利用操作系統本身的緩存

4. 默認的鎖粒度爲表級鎖,所以併發度很差,加鎖快,鎖衝突較少,所以不太容易發生死鎖

5. 支持全文索引(MySQL5.6之後,InnoDB存儲引擎也對全文索引做了支持),但是MySQL的全文索引基本不會使用,

    對於全文索引,現在有其他成熟的解決方案,比如:ElasticSearch,Solr,Sphinx等

6. 數據庫所在主機如果宕機,MyISAM的數據文件容易損壞,而且難恢復

 

3)MEMORY存儲引擎

將數據存在內存中,和市場上的Redis,memcached等思想類似,爲了提高數據的訪問速度,主要特點:

1. 支持的數據類型有限制,比如:不支持TEXT和BLOB類型,對於字符串類型的數據,只支持固定長度的行,

    VARCHAR會被自動存儲爲CHAR類型

2. 支持的鎖粒度爲表級鎖。所以,在訪問量比較大時,表級鎖會成爲MEMORY存儲引擎的瓶頸

3. 由於數據是存放在內存中,所以在服務器重啓之後,所有數據都會丟失

4. 查詢的時候,如果有用到臨時表,而且臨時表中有BLOB,TEXT類型的字段,那麼這個臨時表就會轉化爲MyISAM類型的表,

    性能會急劇降低;

 

4)ARCHIVE存儲引擎

ARCHIVE存儲引擎適合的場景有限,由於其支持壓縮,故主要是用來做日誌,流水等數據的歸檔,主要特點:

1. 支持Zlib壓縮,數據在插入表之前,會先被壓縮

2. 僅支持SELECT和INSERT操作,存入的數據就只能查詢,不能做修改和刪除

3. 只支持自增鍵上的索引,不支持其他索引;

 

5)CSV存儲引擎

數據中轉試用,主要特點:

1. 其數據格式爲.csv格式的文本,可以直接編輯保存

2. 導入導出比較方便,可以將某個表中的數據直接導出爲csv,試用Excel辦公軟件打開

 

InnoDB和MyISAM的對比

1. 由於鎖粒度的不同,InnoDB比MyISAM支持更高的併發

2. InnoDB爲行級鎖,MyISAM爲表級鎖,所以InnoDB相對於MyISAM來說,更容易發生死鎖,鎖衝突的概率更大,

    而且上鎖的開銷也更大,因爲需要爲每一行加鎖

3. 在備份容災上,InnoDB支持在線熱備,有很成熟的在線熱備解決方案

4. 查詢性能上,MyISAM的查詢效率高於InnoDB,因爲InnoDB在查詢過程中,是需要維護數據緩存,

    而且查詢過程是先定位到行所在的數據塊,然後在從數據塊中定位到要查找的行;

    而MyISAM可以直接定位到數據所在的內存地址,可以直接找到數據

5. SELECT COUNT(*)語句,如果行數在千萬級別以上,MyISAM可以快速查出,而InnoDB查詢的特別慢,

    因爲MyISAM將行數單獨存儲了,而InnoDB需要朱行去統計行數;所以如果使用InnoDB,而且需要查詢行數,

    則需要對行數進行特殊處理,如:離線查詢並緩存

6. MyISAM的表結構文件包括:.frm(表結構定義),.MYI(索引),.MYD(數據);

    而InnoDB的表數據文件爲:.ibd和.frm(表結構定義)

 

如何選擇合適的存儲引擎

1. 使用場景是否需要事務支持

2. 是否需要支持高併發,InnoDB的併發度遠高於MyISAM

3. 是否需要支持外鍵

4. 是否需要支持在線熱備

5. 高效緩衝數據,InnoDB對數據和索引都做了緩衝,而MyISAM只緩衝了索引

6. 索引,不同存儲引擎的索引並不太一樣

 

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