數(shù)據(jù)庫(kù)中都會(huì)有存儲(chǔ)引擎的概念葛假,MySQL的特點(diǎn)就是其存儲(chǔ)引擎支持插件式的,存儲(chǔ)引擎用來(lái)處理數(shù)據(jù)庫(kù)相關(guān)的CRUD操作滋恬。
MySQL中常見(jiàn)的存儲(chǔ)引擎有如下幾種:
- InnoDB
- MyISAM
- Memory
- NDB Cluster
- Federated
- CSV
- Archive
InnoDB最開(kāi)始作為第三方存儲(chǔ)引擎存在聊训,其誕生的時(shí)間比MySQL本身還要早,它被包括在MySQL數(shù)據(jù)庫(kù)所有的二進(jìn)制發(fā)行版本中恢氯,并從MySQL5.5開(kāi)始取代MyISAM的位置成為默認(rèn)的表存儲(chǔ)引擎带斑。另外,其他的存儲(chǔ)引擎官方已經(jīng)不再維護(hù)和開(kāi)發(fā)勋拟,所以我們應(yīng)該要盡可能使用InnoDB
可以通過(guò)show engines
查看MySQL支持的存儲(chǔ)引擎
各存儲(chǔ)引擎特性
先簡(jiǎn)述一下兩個(gè)概念勋磕,OLTP和OLAP。
InnoDB
- 面向OLTP的應(yīng)用敢靡,支持事務(wù)挂滓;
- 支持行鎖定、外鍵醋安;
- 不僅可以使用文件系統(tǒng)杂彭,還能使用裸設(shè)備墓毒;
- 實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的4種隔離級(jí)別。
MyISAM
- 不支持事務(wù)亲怠,面向OLAP應(yīng)用所计,如數(shù)據(jù)倉(cāng)庫(kù);
- 并發(fā)時(shí)鎖表团秽;
- 索引容易損壞主胧、數(shù)據(jù)容易丟失;
- 數(shù)據(jù)文件可以直接拷貝到另一臺(tái)服務(wù)器使用习勤。
MyISAM存儲(chǔ)引擎創(chuàng)建的表由.MYD和.MYI文件組成疮装。.MYD用來(lái)存放數(shù)據(jù) 很泊,.MYI存放索引。
a表的創(chuàng)建語(yǔ)句:
create table a(a int) engine=myisam;
。b表的創(chuàng)建語(yǔ)句:create table b(a int);
其默認(rèn)的存儲(chǔ)引擎為InnoDB雷酪。a.frm和b.frm為表的結(jié)構(gòu)文件晃痴,可以通過(guò)mysqlfrm將frm文件轉(zhuǎn)成create table語(yǔ)句踢步。
mysqlfrm --diagnostic /var/lib/mysql/test/a.frm
mysqlfrm工具在MySQL Utilities工具包中生棍,使用前需要先安裝Utilities
.MYD是MyISAM存儲(chǔ)引擎的數(shù)據(jù)存儲(chǔ)文件,.MYI是MyISAM存儲(chǔ)引擎的索引存儲(chǔ)文件蛤虐,.ibd是InnoDB存儲(chǔ)引擎的數(shù)據(jù)和索引存儲(chǔ)文件党饮。
NDB
NDB存儲(chǔ)引擎也叫NDB Cluster存儲(chǔ)引擎,主要用于MySQL Cluster分布式集群環(huán)境驳庭。
Memory
- 全內(nèi)存存儲(chǔ)刑顺,會(huì)話失效后數(shù)據(jù)丟失;
- 支持哈希索引饲常。
CSV
- 數(shù)據(jù)通過(guò)csv文件存儲(chǔ)蹲堂;
- 要求每個(gè)列都是NOT NULL屬性。
Federated
Federated有點(diǎn)類(lèi)似于Oracle的dblink贝淤,主要用于遠(yuǎn)程存取其他MySQL服務(wù)器上的數(shù)據(jù)贯城。
參考
《MySQL技術(shù)內(nèi)幕:InnoDB存儲(chǔ)引擎》