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ù)庫和表格的存儲(chǔ)引擎,以便在選擇如何存儲(chǔ)你的信息碾牌、如何檢索這些信息以及你需要你的數(shù)據(jù)結(jié)合什么性能和功能的時(shí)候?yàn)槟闾峁┳畲蟮撵`活性康愤。
使用以下命令可以查看MySQL支持的引擎:
mysql>show engines;
一、MyISAM存儲(chǔ)引擎
默認(rèn)的存儲(chǔ)引擎舶吗,提供高速存儲(chǔ)和檢索征冷,以及全文搜索能力。
不支持事務(wù)裤翩。表級(jí)鎖。不能在表損壞后恢復(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ā)寫入的性能較低物臂。
支持長度不變的數(shù)據(jù)類型旺拉,不支持BLOB或TEXT長度可變的數(shù)據(jù)類型。VARCHAR是一種長度可變的類型棵磷,但因?yàn)樗贛ySQL內(nèi)部當(dā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壓縮庫掠哥,在記錄被請(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。