MySQL 5.5+ 默認採用 InnoDB 作為默認存儲引擎。存儲引擎決定了表的存儲方式、索引結構、鎖機制、事務支持等核心行為。本文系統梳理四大主流引擎的特性、適用場景及關鍵參數。
SHOW VARIABLES LIKE 'default_storage_engine';SHOW ENGINES; 或 SELECT * FROM INFORMATION_SCHEMA.ENGINES;CREATE TABLE t (id INT) ENGINE=InnoDB; / ALTER TABLE t ENGINE=InnoDB;SHOW TABLE STATUS FROM db_name;.frm(定義)、.MYD(數據)、.MYI(索引)。DATA DIRECTORY/INDEX DIRECTORY),均衡 I/O。--myisam-recover)。| 格式 | 特點 | 優點 | 缺點 |
|---|---|---|---|
| 靜態/固定長度 | 所有列非變長,行長固定 | 存取極快、易緩存、故障易恢復 | 佔用空間大 |
| 動態 | 含變長列 | 佔用空間少 | 頻繁更新產生碎片,需定期 OPTIMIZE TABLE;故障恢復難 |
| 壓縮 | myisampack 生成,唯讀 | 空間極小、訪問開銷極低 | 不可修改 |
ALTER TABLE ... AUTO_INCREMENT=n 設置起始值(重啟失效,保存在內存);LAST_INSERT_ID() 獲取最後自增值。注意: 自增列必須為索引(或組合索引首列)。ON DELETE/UPDATE {RESTRICT|CASCADE|SET NULL|NO ACTION}。可用 SET foreign_key_checks=0/1 臨時關閉/開啟檢查。.frm 文件存元數據。服務重啟數據丟失,結構保留。=, <=>) 極快,不支持範圍查詢 (<, >, BETWEEN, ORDER BY)。可指定 USING BTREE。BLOB/TEXT;VARCHAR 內部按 CHAR 處理。max_heap_table_size (默認 16MB) 限制,可用 MAX_ROWS 指定行數上限。-- 創建內存表並從現有表導入 CREATE TABLE tmp_mem ENGINE=MEMORY SELECT id, name FROM users; -- 指定 BTREE 索引支持範圍查詢 CREATE INDEX idx_city ON tmp_mem (city_id) USING BTREE; -- 服務啟動自動預熱數據(配置 --init-file)
INSERT_METHOD={FIRST|LAST|NO} 控制插入目標表。DROP TABLE 僅刪除定義,不影響底表。.frm (定義)、.MRG (底表列表及插入策略)。可直接編輯 .MRG 後 FLUSH TABLES 生效。CREATE TABLE man_all (id INT, name VARCHAR(20)) ENGINE=MERGE UNION=(man1,man2) INSERT_METHOD=LAST;
| 場景 | 推薦引擎 |
|---|---|
| 高併發寫入、事務處理、數據一致性關鍵 | InnoDB (默認首選) |
| 純讀/以讀為主、全文搜索、無事務需求 | MyISAM |
| 臨時表、緩存表、極高速查找、數據可丟失 | MEMORY |
| 海量日誌/歸檔表分片查詢、統一訪問入口 | MERGE |
理解各引擎特性,結合業務場景選型,是 MySQL 架構設計的關鍵一環。