一、MyISAM存儲引擎
提供高速存儲和檢索,以及全文搜索能力。
不支持事務。表級鎖。不能在表損壞后恢復數據。
適合在以下幾種情況下使用:
1.做很多count的計算
2.查詢非常頻繁
二、InnoDB存儲引擎
具有提交、回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。
基于聚簇索引建立,聚簇索引對主鍵查詢有很高的性能。不過它的二級索引(secondary index,非主鍵索引)中必須包含主鍵列,所以如果主鍵列很大的話,其他的所有索引都會很大。因此表上的索引較多的話,主鍵應當盡可能的小。
支持事務和外鍵。行級鎖。
適合在以下幾種情況下使用:
1.更新和查詢都相當的頻繁,多重并發
2.要求事務,或者可靠性要求比較高
3.外鍵約束,MySQL支持外鍵的存儲引擎只有InnoDB
一般來說,如果需要事務支持,并且有較高的并發讀取頻率,InnoDB是不錯的選擇。
三、MEMORY(HEAP)引擎
數據保存在內存中,擁有極高的插入、更新和查詢效率。但是不穩定,重啟以后數據都會丟失。
不支持事務。支持表級鎖,因此并發寫入的性能較低。
支持長度不變的數據類型,不支持BLOB或TEXT長度可變的數據類型。VARCHAR是一種長度可變的類型,但因為它在MySQL內部當做長度固定不變的CHAR類型,所以可以使用。
每個表會生成一個.frm文件,該文件只存儲表的結構。
支持HASH索引和B-Tree索引,引擎默認使用HASH索引。B-Tree索引的優于HASH索引的是,可以使用部分查詢和通配查詢,也可以使用<、>和>=等操作符方便數據挖掘。HASH索引進行“相等比較”非???,但是對“范圍比較”的速度就慢多了,因此HASH索引值適合使用在=和<>的操作符中,不適合在<或>操作符中,也同樣不適合用在order by子句中。
在內存中存放數據,所以會造成內存的使用,可以通過參數max_heap_table_size控制MEMORY表的大小。
四、ARCHIVE引擎
擁有很好的壓縮機制,它使用zlib壓縮庫,在記錄被請求時會實時壓縮。
支持最基本的插入和查詢兩種功能。在MySQL 5.5開始支持索引。
不支持事務。支持行級鎖和專用的緩存區,所以可以實現高并發的插入。
適合存儲大量日志、歷史數據。
五、BLACKHOLE引擎
接受但不存儲數據,但是如果MySQL啟用了二進制日志,SQL語句被寫入日志(并被復制到從服務器)。
用于做日志記錄或同步歸檔的中繼存儲。但這種應用方式會碰到很多問題,因此并不推薦。
支持事務,而且支持mvcc的行級鎖。
六、CSV引擎
每個表會生成一個.CSV文件,將CSV類型的文件當做表進行處理。
把數據以逗號分隔的格式存儲在文本文件中,這種文件是一種普通文本文件,每個數據行占用一個文本行。
不支持索引,即使用該種類型的表沒有主鍵列,也不允許表中的字段為null。