一、InnoDB存儲引擎數據庫
從MySQL5.5版本以後,MySQL的默認內置存儲引擎已是InnoDB了,他的主要特色有:緩存
(1)災難恢復性比較好;
(2)支持事務。默認的事務隔離級別爲可重複度,經過MVCC(併發版本控制)來實現的。
(3)使用的鎖粒度爲行級鎖,能夠支持更高的併發;
(4)支持外鍵;
(5)配合一些熱備工具能夠支持在線熱備份;
(6)在InnoDB中存在着緩衝管理,經過緩衝池,將索引和數據所有緩存起來,加快查詢的速度;
(7)對於InnoDB類型的表,其數據的物理組織形式是聚簇表。全部的數據按照主鍵來組織。數據和索引放在一塊,都位於B+數的葉子節點上;服務器
二、MyISAM存儲引擎
在5.5版本以前,MyISAM是MySQL的默認存儲引擎,該存儲引擎併發性差,不支持事務,因此使用場景比較少,主要特色爲:併發
(1)不支持事務;
(2)不支持外鍵,若是強行增長外鍵,不會提示錯誤,只是外鍵不其做用;
(3)對數據的查詢緩存只會緩存索引,不會像InnoDB同樣緩存數據,並且是利用操做系統自己的緩存;
(4)默認的鎖粒度爲表級鎖,因此併發度不好,加鎖快,鎖衝突較少,因此不太容易發生死鎖;
(5)支持全文索引(MySQL5.6以後,InnoDB存儲引擎也對全文索引作了支持),可是MySQL的全文索引基本不會使用,對於全文索引,如今有其餘成熟的解決方案,好比:ElasticSearch,Solr,Sphinx等。
(6)數據庫所在主機若是宕機,MyISAM的數據文件容易損壞,並且難恢復;memcached
三、MEMORY存儲引擎
將數據存在內存中,和市場上的Redis,memcached等思想相似,爲了提升數據的訪問速度,主要特色:高併發
(1)支持的數據類型有限制,好比:不支持TEXT和BLOB類型,對於字符串類型的數據,只支持固定長度的行,VARCHAR會被自動存儲爲CHAR類型;
(2)支持的鎖粒度爲表級鎖。因此,在訪問量比較大時,表級鎖會成爲MEMORY存儲引擎的瓶頸;
(3)因爲數據是存放在內存中,因此在服務器重啓以後,全部數據都會丟失;
(4)查詢的時候,若是有用到臨時表,並且臨時表中有BLOB,TEXT類型的字段,那麼這個臨時表就會轉化爲MyISAM類型的表,性能會急劇下降;工具
四、ARCHIVE存儲引擎
ARCHIVE存儲引擎適合的場景有限,因爲其支持壓縮,故主要是用來作日誌,流水等數據的歸檔,主要特色:性能
(1)支持Zlib壓縮,數據在插入表以前,會先被壓縮;
(2)僅支持SELECT和INSERT操做,存入的數據就只能查詢,不能作修改和刪除;
(3)只支持自增鍵上的索引,不支持其餘索引;操作系統
五、CSV存儲引擎
數據中轉試用,主要特色:版本控制
(1)其數據格式爲.csv格式的文本,能夠直接編輯保存;
(2)導入導出比較方便,能夠將某個表中的數據直接導出爲csv,試用Excel辦公軟件打開;
一、因爲鎖粒度的不一樣,InnoDB比MyISAM支持更高的併發;
二、InnoDB爲行級鎖,MyISAM爲表級鎖,因此InnoDB相對於MyISAM來講,更容易發生死鎖,鎖衝突的機率更大,並且上鎖的開銷也更大,由於須要爲每一行加鎖;
三、在備份容災上,InnoDB支持在線熱備,有很成熟的在線熱備解決方案;
四、查詢性能上,MyISAM的查詢效率高於InnoDB,由於InnoDB在查詢過程當中,是須要維護數據緩存,並且查詢過程是先定位到行所在的數據塊,而後在從數據塊中定位到要查找的行;而MyISAM能夠直接定位到數據所在的內存地址,能夠直接找到數據;
五、SELECT COUNT(*)語句,若是行數在千萬級別以上,MyISAM能夠快速查出,而InnoDB查詢的特別慢,由於MyISAM將行數單獨存儲了,而InnoDB須要朱行去統計行數;因此若是使用InnoDB,並且須要查詢行數,則須要對行數進行特殊處理,如:離線查詢並緩存;
六、MyISAM的表結構文件包括:.frm(表結構定義),.MYI(索引),.MYD(數據);而InnoDB的表數據文件爲:.ibd和.frm(表結構定義);
一、使用場景是否須要事務支持;
二、是否須要支持高併發,InnoDB的併發度遠高於MyISAM;
三、是否須要支持外鍵;
四、是否須要支持在線熱備;
五、高效緩衝數據,InnoDB對數據和索引都作了緩衝,而MyISAM只緩衝了索引;
六、索引,不一樣存儲引擎的索引並不太同樣;
注:文章屬原創,若是轉發,請標註出處。
後續更多文章將更新在我的小站上,歡迎查看。
另外提供一些優秀的IT視頻資料,可免費下載!如須要請查看https://www.592xuexi.com