一、引擎分類
1)InnoDB(默認(rèn)存儲(chǔ)引擎)
● 特性
○ 完整 ACID 事務(wù)支持:通過 redo log(重做日志)和 undo log(回滾日志)實(shí)現(xiàn)崩潰恢復(fù)與事務(wù)回滾。
○ 行級(jí)鎖 + MVCC:提升并發(fā)性能,減少鎖沖突(如高并發(fā)訂單系統(tǒng))。
○ 外鍵約束:保證數(shù)據(jù)完整性,級(jí)聯(lián)更新/刪除。
○ 聚簇索引:數(shù)據(jù)文件與索引文件綁定(.ibd),數(shù)據(jù)按主鍵物理順序存儲(chǔ),主鍵查詢效率高。
● 適用場(chǎng)景:
○ OLTP 系統(tǒng)(如電商交易、銀行轉(zhuǎn)賬)
○ 高并發(fā)讀寫場(chǎng)景
○ 需要外鍵約束的業(yè)務(wù)
● 5.7&5.8版本物理存儲(chǔ)結(jié)構(gòu)
○ 在版本5.7中創(chuàng)建一張普通的InnoDB表,在數(shù)據(jù)庫的data目錄下會(huì)生成2個(gè)文件:*.frm 表結(jié)構(gòu)文件,*.idb 數(shù)據(jù)文件。

○ 在版本8.0中創(chuàng)建一張普通的InnoDB表,只在數(shù)據(jù)庫的data目錄下生成1個(gè)文件:*.idb數(shù)據(jù)文件;表的元數(shù)據(jù)信息存儲(chǔ)在了系統(tǒng)表information_schema.COLUMNS中.
select * from information_schema.`COLUMNS` where table_name = 't1'

2)MyISAM
● 特性:
○ 高速讀?。捍鎯?chǔ)結(jié)構(gòu)分為數(shù)據(jù)文件(.MYD)和索引文件(.MYI),非聚簇索引(索引與數(shù)據(jù)分離),適合全表掃描。
○ 全文索引:支持 FULLTEXT 索引(MySQL 5.6前唯一選擇)。
○ 表級(jí)鎖:不支持事務(wù)和行級(jí)鎖,寫入時(shí)鎖定整張表,并發(fā)性能差。
● 適用場(chǎng)景:
○ 讀密集型應(yīng)用(如日志分析、報(bào)表生成)
○ 靜態(tài)數(shù)據(jù)存儲(chǔ)(如配置表、歷史數(shù)據(jù)歸檔)
○ 只讀或讀寫較少的場(chǎng)景(如博客、新聞網(wǎng)站)
● 5.7&5.8版本物理存儲(chǔ)結(jié)構(gòu)
○ 在版本5.7中創(chuàng)建一張普通的MyISAM表,在數(shù)據(jù)庫的data目錄下會(huì)生成3個(gè)文件:*.frm表結(jié)構(gòu)文件,*.MYD數(shù)據(jù)文件,*.MYI索引文件。

○ 在版本8.0中創(chuàng)建一張普通的MyISAM表,只在數(shù)據(jù)庫的data目錄下會(huì)生成3個(gè)文件:*.MYD數(shù)據(jù)文件,*.MYI索引文件,*.sdi序列化存儲(chǔ)的元數(shù)據(jù)信息;同時(shí)表的元數(shù)據(jù)信息也在系統(tǒng)表information_schema.COLUMNS中存儲(chǔ)了一份。

select * from information_schema.`COLUMNS` where table_name = 't2';

3)Memory
● 特性:
○ 內(nèi)存存儲(chǔ):數(shù)據(jù)完全駐留內(nèi)存,讀寫延遲低。
○ 無持久化:不支持事務(wù),服務(wù)器重啟后數(shù)據(jù)丟失。
○ 表級(jí)鎖:僅支持哈希索引或 B-Tree 索引。
● 適用場(chǎng)景:
○ 會(huì)話緩存(如用戶登錄狀態(tài))
○ 臨時(shí)結(jié)果集(如中間計(jì)算數(shù)據(jù))
4)NDB Cluster
● 特性:
○ 分布式架構(gòu):數(shù)據(jù)分片存儲(chǔ)于多節(jié)點(diǎn),支持高可用。
○ 事務(wù)支持:與 InnoDB 類似,但需搭配 MySQL Cluster 使用。
● 適用場(chǎng)景:
○ 電信級(jí)高可用系統(tǒng)
○ 實(shí)時(shí)計(jì)費(fèi)系統(tǒng)
二、引擎對(duì)比
| 特性 | InnoDB | MyISAM | Memory | NDB |
|---|---|---|---|---|
| 事務(wù)支持 | ? | ? | ? | ? |
| 鎖粒度 | 行級(jí)鎖 | 表級(jí)鎖 | 表級(jí)鎖 | 行級(jí)鎖 |
| 外鍵約束 | ? | ? | ? | ? |
| 全文索引 | ? (5.6+) | ? | ? | ? |
| 存儲(chǔ)位置 | 磁盤 | 磁盤 | 內(nèi)存 | 內(nèi)存/磁盤 |
| 崩潰恢復(fù) | ? | ? | ? | ? |
| 壓縮能力 | 表壓縮 | 只讀壓縮 | ? | ? |
三、附錄
3.1、查詢當(dāng)前數(shù)據(jù)支持的存儲(chǔ)引擎
SHOW ENGINES

● Engine:支持的引擎名稱
● Support:是否支持,DEFAULT表示默認(rèn)存儲(chǔ)引擎,YES表示支持,NO表示不支持
● Comment:存儲(chǔ)引擎的備注
● Transactions:是否支撐事務(wù),YES表示支持,NO表示不支持
● XA:是否支持 XA 分布式事務(wù)(跨多個(gè)數(shù)據(jù)庫的協(xié)調(diào)事務(wù)),YES表示支持,NO表示不支持
● SavePoints:是否支持 保存點(diǎn)(Savepoint),允許事務(wù)部分回滾,YES表示支持,NO表示不支持 3.2、創(chuàng)建表指定存儲(chǔ)引擎 ● 直接使用SQL語句指定存儲(chǔ)引擎,不指定默認(rèn)為InnoDB
CREATE TABLE t1 (i INT) ENGINE = InnoDB;
CREATE TABLE t2 (i INT) ENGINE = MyISAM;
CREATE TABLE t3 (i INT) ENGINE = MEMORY;
● Navicat中創(chuàng)建表在Options中選擇指定存儲(chǔ)引起
