【高效MySQL】MySQL存儲(chǔ)引擎

一、引擎分類

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ù)文件。

image.png

○ 在版本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'
image.png

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索引文件。

image.png

○ 在版本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ǔ)了一份。

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

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
image.png

● 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ǔ)引起

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容