MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件(或者內(nèi)存)中。這些技術(shù)中的每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制、索引技巧、鎖定水平并且最終提供廣泛的不同的功能和能力。通過選擇不同的技術(shù),你能夠獲得額外的速度或者功能,從而改善你的應(yīng)用的整體功能。這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱作存儲(chǔ)引擎(也稱作表類型)。MySQL默認(rèn)配置了許多不同的存儲(chǔ)引擎,可以預(yù)先設(shè)置或者在MySQL服務(wù)器中啟用。你可以選擇適用于服務(wù)器、數(shù)據(jù)庫(kù)和表格的存儲(chǔ)引擎,以便在選擇如何存儲(chǔ)你的信息、如何檢索這些信息以及你需要你的數(shù)據(jù)結(jié)合什么性能和功能的時(shí)候?yàn)槟闾峁┳畲蟮撵`活性。
使用以下命令可以查看MySQL支持的引擎:
mysql>show engines;
一、MyISAM存儲(chǔ)引擎
默認(rèn)的存儲(chǔ)引擎,提供高速存儲(chǔ)和檢索,以及全文搜索能力。
不支持事務(wù)。表級(jí)鎖。不能在表?yè)p壞后恢復(fù)數(shù)據(jù)。
每個(gè)表會(huì)生成三個(gè)文件(文件名就是表名):
.frm 表結(jié)構(gòu);
.MYD 數(shù)據(jù);
.MYI 索引。
適合在以下幾種情況下使用:
1.做很多count的計(jì)算
2.查詢非常頻繁
二、InnoDB存儲(chǔ)引擎
具有提交、回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID兼容)存儲(chǔ)引擎。
基于聚簇索引建立,聚簇索引對(duì)主鍵查詢有很高的性能。不過它的二級(jí)索引(secondary index,非主鍵索引)中必須包含主鍵列,所以如果主鍵列很大的話,其他的所有索引都會(huì)很大。因此表上的索引較多的話,主鍵應(yīng)當(dāng)盡可能的小。
支持事務(wù)和外鍵。行級(jí)鎖。
適合在以下幾種情況下使用:
1.更新和查詢都相當(dāng)?shù)念l繁,多重并發(fā)
2.要求事務(wù),或者可靠性要求比較高
3.外鍵約束,MySQL支持外鍵的存儲(chǔ)引擎只有InnoDB
一般來說,如果需要事務(wù)支持,并且有較高的并發(fā)讀取頻率,InnoDB是不錯(cuò)的選擇。
三、MEMORY(HEAP)引擎
數(shù)據(jù)保存在內(nèi)存中,擁有極高的插入、更新和查詢效率。但是不穩(wěn)定,重啟以后數(shù)據(jù)都會(huì)丟失。
不支持事務(wù)。支持表級(jí)鎖,因此并發(fā)寫入的性能較低。
支持長(zhǎng)度不變的數(shù)據(jù)類型,不支持BLOB或TEXT長(zhǎng)度可變的數(shù)據(jù)類型。VARCHAR是一種長(zhǎng)度可變的類型,但因?yàn)樗贛ySQL內(nèi)部當(dāng)做長(zhǎng)度固定不變的CHAR類型,所以可以使用。
每個(gè)表會(huì)生成一個(gè).frm文件,該文件只存儲(chǔ)表的結(jié)構(gòu)。
支持HASH索引和B-Tree索引,擎默認(rèn)使用HASH索引。B-Tree索引的優(yōu)于HASH索引的是,可以使用部分查詢和通配查詢,也可以使用<、>和>=等操作符方便數(shù)據(jù)挖掘。HASH索引進(jìn)行“相等比較”非常快,但是對(duì)“范圍比較”的速度就慢多了,因此HASH索引值適合使用在=和<>的操作符中,不適合在<或>操作符中,也同樣不適合用在order by子句中。
在內(nèi)存中存放數(shù)據(jù),所以會(huì)造成內(nèi)存的使用,可以通過參數(shù)max_heap_table_size控制MEMORY表的大小。
四、ARCHIVE引擎
擁有很好的壓縮機(jī)制,它使用zlib壓縮庫(kù),在記錄被請(qǐng)求時(shí)會(huì)實(shí)時(shí)壓縮。
支持最基本的插入和查詢兩種功能。在MySQL 5.5開始支持索引。
不支持事務(wù)。支持行級(jí)鎖和專用的緩存區(qū),所以可以實(shí)現(xiàn)高并發(fā)的插入。
適合存儲(chǔ)大量日志、歷史數(shù)據(jù)。
五、BLACKHOLE引擎
接受但不存儲(chǔ)數(shù)據(jù),但是如果MySQL啟用了二進(jìn)制日志,SQL語句被寫入日志(并被復(fù)制到從服務(wù)器)。
用于做日志記錄或同步歸檔的中繼存儲(chǔ)。但這種應(yīng)用方式會(huì)碰到很多問題,因此并不推薦。
支持事務(wù),而且支持mvcc的行級(jí)鎖。
六、CSV引擎
每個(gè)表會(huì)生成一個(gè).CSV文件,將CSV類型的文件當(dāng)做表進(jìn)行處理。
把數(shù)據(jù)以逗號(hào)分隔的格式存儲(chǔ)在文本文件中,這種文件是一種普通文本文件,每個(gè)數(shù)據(jù)行占用一個(gè)文本行。
不支持索引,即使用該種類型的表沒有主鍵列,也不允許表中的字段為null。