MySQL中的數據用各類不一樣的技術存儲在文件(或者內存)中。這些技術中的每一種技術都使用不一樣的存儲機制、索引技巧、鎖定水平而且最終提供普遍的不一樣的功能和能力。經過選擇不一樣的技術,你可以得到額外的速度或者功能,從而改善你的應用的總體功能。這些不一樣的技術以及配套的相關功能在MySQL中被稱做存儲引擎(也稱做表類型)。MySQL默認配置了許多不一樣的存儲引擎,能夠預先設置或者在MySQL服務器中啓用。你能夠選擇適用於服務器、數據庫和表格的存儲引擎,以便在選擇如何存儲你的信息、如何檢索這些信息以及你須要你的數據結合什麼性能和功能的時候爲你提供最大的靈活性。
使用如下命令能夠查看MySQL支持的引擎:html
mysql> show engines;
默認的存儲引擎,提供高速存儲和檢索,以及全文搜索能力。
不支持事務。表級鎖。不能在表損壞後恢復數據。
每一個表會生成三個文件(文件名就是表名):
.frm 表結構;
.MYD 數據;
.MYI 索引。
適合在如下幾種狀況下使用:
1.作不少count的計算
2.查詢很是頻繁mysql
具備提交、回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。
基於聚簇索引創建,聚簇索引對主鍵查詢有很高的性能。不過它的二級索引(secondary index,非主鍵索引)中必須包含主鍵列,因此若是主鍵列很大的話,其餘的全部索引都會很大。所以表上的索引較多的話,主鍵應當儘量的小。
支持事務和外鍵。行級鎖。
適合在如下幾種狀況下使用:
1.更新和查詢都至關的頻繁,多重併發
2.要求事務,或者可靠性要求比較高
3.外鍵約束,MySQL支持外鍵的存儲引擎只有InnoDB
通常來講,若是須要事務支持,而且有較高的併發讀取頻率,InnoDB是不錯的選擇。sql
數據保存在內存中,擁有極高的插入、更新和查詢效率。可是不穩定,重啓之後數據都會丟失。
不支持事務。支持表級鎖,所以併發寫入的性能較低。
支持長度不變的數據類型,不支持BLOB或TEXT長度可變的數據類型。VARCHAR是一種長度可變的類型,但由於它在MySQL內部當作長度固定不變的CHAR類型,因此可使用。
每一個表會生成一個.frm文件,該文件只存儲表的結構。
支持HASH索引和B-Tree索引,擎默認使用HASH索引。B-Tree索引的優於HASH索引的是,可使用部分查詢和通配查詢,也可使用<、>和>=等操做符方便數據挖掘。HASH索引進行「相等比較」很是快,可是對「範圍比較」的速度就慢多了,所以HASH索引值適合使用在=和<>的操做符中,不適合在<或>操做符中,也一樣不適合用在order by子句中。
在內存中存放數據,因此會形成內存的使用,能夠經過參數max_heap_table_size控制MEMORY表的大小。數據庫
擁有很好的壓縮機制,它使用zlib壓縮庫,在記錄被請求時會實時壓縮。
支持最基本的插入和查詢兩種功能。在MySQL 5.5開始支持索引。
不支持事務。支持行級鎖和專用的緩存區,因此能夠實現高併發的插入。
適合存儲大量日誌、歷史數據。緩存
接受但不存儲數據,可是若是MySQL啓用了二進制日誌,SQL語句被寫入日誌(並被複制到從服務器)。
用於作日誌記錄或同步歸檔的中繼存儲。但這種應用方式會碰到不少問題,所以並不推薦。
支持事務,並且支持mvcc的行級鎖。安全
每一個表會生成一個.CSV文件,將CSV類型的文件當作表進行處理。
把數據以逗號分隔的格式存儲在文本文件中,這種文件是一種普通文本文件,每一個數據行佔用一個文本行。
不支持索引,即便用該種類型的表沒有主鍵列,也不容許表中的字段爲null。
查看更多:
MySQL優化
MySQL鎖詳解
MySQL事務
MySQL索引類型性能優化
參考資料:
http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html
《MySQL性能優化與架構設計》
《百度百科》服務器