MySQL有多種存儲(chǔ)引擎失乾,每種存儲(chǔ)引擎有各自的優(yōu)缺點(diǎn),可以擇優(yōu)選擇使用:
- MyISAM
- InnoDB
- MERGE
- MEMORY(HEAP)
- BDB(BerkeleyDB)
- EXAMPLE
- FEDERATED
- ARCHIVE
- CSV
- BLACKHOLE
MySQL支持?jǐn)?shù)個(gè)存儲(chǔ)引擎作為對(duì)不同表的類型的處理器。MySQL存儲(chǔ)引擎包括處理事務(wù)安全表的引擎和處理非事務(wù)安全表的引擎:
MyISAM
MyISAM管理非事務(wù)表能犯。它提供高速存儲(chǔ)和檢索旺聚,以及全文搜索能力。
MEMORY
MEMORY存儲(chǔ)引擎提供“內(nèi)存中”表咳短。MERGE存儲(chǔ)引擎允許集合將被處理同樣的MyISAM表作為一個(gè)單獨(dú)的表填帽。就像MyISAM一樣,MEMORY和MERGE存儲(chǔ)引擎處理非事務(wù)表诲泌,這兩個(gè)引擎也都被默認(rèn)包含在MySQL中盲赊。
注釋:MEMORY存儲(chǔ)引擎正式地被確定為HEAP引擎。
InnoDB
InnoDB和BDB存儲(chǔ)引擎提供事務(wù)安全表敷扫。默認(rèn)引擎,BDB被包含在為支持它的操作系統(tǒng)發(fā)布的MySQL-Max二進(jìn)制分發(fā)版里哀蘑。
EXAMPLE
EXAMPLE存儲(chǔ)引擎是一個(gè)“存根”引擎诚卸,它不做什么。你可以用這個(gè)引擎創(chuàng)建表绘迁,但沒有數(shù)據(jù)被存儲(chǔ)于其中或從其中檢索合溺。
NDB Cluster
NDB Cluster是被MySQL Cluster用來實(shí)現(xiàn)分割到多臺(tái)計(jì)算機(jī)上的表的存儲(chǔ)引擎。
ARCHIVE
ARCHIVE存儲(chǔ)引擎被用來無索引地缀台,非常小地覆蓋存儲(chǔ)的大量數(shù)據(jù)棠赛。
CSV
CSV存儲(chǔ)引擎把數(shù)據(jù)以逗號(hào)分隔的格式存儲(chǔ)在文本文件中。
BLACKHOLE
BLACKHOLE存儲(chǔ)引擎接受但不存儲(chǔ)數(shù)據(jù)膛腐,并且檢索總是返回一個(gè)空集睛约。
FEDERATED
FEDERATED存儲(chǔ)引擎把數(shù)據(jù)存在遠(yuǎn)程數(shù)據(jù)庫中。
比較常用的是MyISAM和InnoBD
構(gòu)成上的區(qū)別:
每個(gè)MyISAM在磁盤上存儲(chǔ)成三個(gè)文件哲身。第一個(gè)文件的名字以表的名字開始辩涝,擴(kuò)展名指出文件類型。
- .frm文件存儲(chǔ)表定義勘天。
- 數(shù)據(jù)文件的擴(kuò)展名為.MYD (MYData)怔揩。
- 索引文件的擴(kuò)展名是.MYI (MYIndex)。
基于磁盤的資源是InnoDB表空間數(shù)據(jù)文件和它的日志文件脯丝,InnoDB 表的大小只受限于操作系統(tǒng)文件的大小商膊,一般為 2GB.
事務(wù)處理上方面:
MyISAM類型的表強(qiáng)調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類型更快宠进,但是不提供事務(wù)支持
InnoDB提供事務(wù)支持事務(wù)晕拆,外部鍵(foreign key)等高級(jí)數(shù)據(jù)庫功能
圖片.png
image.png
image.png
如何選擇mysql的存儲(chǔ)引擎
在開發(fā)中,我們經(jīng)常使用的存儲(chǔ)引擎 myisam / innodb/ memory
myisam 存儲(chǔ): 如果表對(duì)事務(wù)要求不高砰苍,同時(shí)是以查詢和添加為主的潦匈,我們考慮使用myisam存儲(chǔ)引擎. ,比如 bbs 中的 發(fā)帖表,回復(fù)表.
INNODB 存儲(chǔ): 對(duì)事務(wù)要求高赚导,保存的數(shù)據(jù)都是重要數(shù)據(jù)茬缩,我們建議使用INNODB,比如訂單表,賬號(hào)表.
Memory 存儲(chǔ)吼旧,比如我們數(shù)據(jù)變化頻繁凰锡,不需要入庫,同時(shí)又頻繁的查詢和修改圈暗,我們考慮使用memory, 速度極快.
Memory 存儲(chǔ)建立的表和數(shù)據(jù)全部存儲(chǔ)在內(nèi)存中,不存在與磁盤上,所以速度極快,無需持久化保存的,建議使用
各存儲(chǔ)引擎的區(qū)別(主要從這幾個(gè)方面回答)
1. 事務(wù)安全
2. 查詢和添加速度
3. 支持全文索引
4. 鎖機(jī)制
5. 外鍵 MyISAM 不支持外鍵掂为, INNODB支持外鍵.
如果你的數(shù)據(jù)庫的存儲(chǔ)引擎是myisam,請(qǐng)一定記住要定時(shí)進(jìn)行碎片整理
因?yàn)楫?dāng)表的存儲(chǔ)引擎為myisam時(shí),刪除表中數(shù)據(jù),MySQL中存儲(chǔ)該表的文件大小不變,
長久以往,文件會(huì)越來越大,因此要定時(shí)進(jìn)行碎片整理
我們應(yīng)該定義對(duì)myisam進(jìn)行整理
optimize table tableName;