1.innodb存儲引擎
? ?mysql5.5中InnoDB成為默認的存儲引擎。InnoDB是事務型存儲引擎,被設計用來處理大量的短期事務。它的性能和自動崩潰恢復特性,使得它在非事務場景中也很流行。
? ?所以可以這么說:“除非需要用到某些InnoDB不具備的特性,并且沒有其他辦法可以替代,否則都應該優先選擇它”。
??InnoDB的數據存儲在表空間中,它可以將每個表的數據和索引存放在單獨文件中。
??InnoDB采用MVCC來支持高并發,并且實現了四個標準的隔離級別。默認級別是REPEATABLE READ(可重復讀),并且通過間隙鎖策略防止幻讀的出現。
? InnoDB表示基于聚簇索引建立的,聚簇索引對主鍵的查詢有很高的性能。
? InnoDB支持真正的熱備份,可以通過XtraBackup工具實現。
? InnoDB內部做了很多優化,包括從磁盤讀取數據時采用的可預測性預讀,能夠自動在內存中創建hash索引,能夠加速插入操作的插入緩沖區等。
? 應用場景:
? ? ? ? ? ? ? ? ?需要在線熱備份
? 數據量大,需要系統崩潰后快速恢復。比如訂單處理。
2.MyISAM存儲引擎
MySQL5.1之前,MyISAM為默認的存儲引擎。MyISAM不支持事務和行級鎖且最大缺陷就是崩潰后無法安全恢復。
.MyISAM將表存儲在兩個文件中:數據文件和索引文件。
?MyISAM對整張表加鎖,讀取時對需要的所有表加共享鎖,寫入時加排它鎖。但是在表有讀取查詢時,也可以往表中插入新的記錄(并發插入)
?MyISAM可以手工或者自動執行檢查修復操作,但是可能導致數據丟失而且修復操作非常慢。
?MyISAM表中BLOB和TEXT等長字段也可以基于前500個字符創建索引。MyISAM也支持全文索引,這是基于分詞創建的索引,可以支持復雜的查詢。
?MyISAM在創建表時候如果指定DELAY_KEY_WRITE(延遲更新索引鍵),在每次修改執行完成時會將索引寫入內存中的鍵緩沖區,擋在清理鍵緩沖區或者關閉表時才會將對應索 ?引塊寫入磁盤,這種方式可以極大提升寫入性能。但是在數據庫或主機崩潰時索引會損壞。
?應用場景:
? ? ? ? ? ? ?主要是SELECT和INSERT操作的場景,比如一般日志型的應用。? ? ? ? ? ?