本文基於 MySQL 5.7 官方參考手冊第 14 章第 1 節,系統整理 InnoDB 作為預設儲存引擎的定位、可用性檢測方法、關閉方式與核心特性,幫助開發者建立標準知識體系。
自 MySQL 5.5 起,InnoDB 取代 MyISAM 成為預設引擎。CREATE TABLE 未指定 ENGINE 時,自動使用 InnoDB。
mysql> CREATE TABLE test (id INT PRIMARY KEY, name VARCHAR(20)); mysql> SHOW CREATE TABLE test; +-------+------------------------------------------------------------+ | Table | Create Table | +-------+------------------------------------------------------------+ | test | CREATE TABLE `test` ( | | | `id` int(11) NOT NULL, | | | `name` varchar(20) DEFAULT NULL, | | | PRIMARY KEY (`id`) | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+------------------------------------------------------------+
雖然預設啟用,但在某些編譯配置或啟動參數下可能被禁用。檢測方法:
-- 方法一:查看引擎狀態 SHOW ENGINES; -- 或 SHOW ENGINE INNODB STATUS; -- 方法二:查看變數 SHOW VARIABLES LIKE 'have_innodb'; -- YES = 可用,DISABLED = 被禁用,NO = 未編譯支援
極少數嵌入式或純讀取場景可能需關閉以節省記憶體:
# my.cnf [mysqld] 區段加入 skip-innodb # 或 innodb=OFF # 重啟服務生效 # 注意:關閉後無法使用交易、外鍵、行級鎖等核心功能
| 特性 | 說明 | 效能/可靠性影響 |
|---|---|---|
| ACID 交易 | COMMIT/ROLLBACK/SAVEPOINT、崩潰恢復 | 資料一致性基石 |
| 行級鎖 | 記錄鎖、間隙鎖、Next-Key Lock | 高並發讀寫吞吐 |
| MVCC | 多版本並發控制、一致性非鎖定讀 | 讀寫不阻塞 |
| 聚簇索引 | 資料按主鍵 B+Tree 儲存,葉子節點含完整行 | 主鍵查詢 O(log N)、範圍查詢極快 |
| 外鍵 | REFERENCES、CASCADE/SET NULL/RESTRICT | 參照完整性保障 |
| 緩衝池 | 記憶體快取資料/索引頁、自適應雜湊索引 | 核心效能調優點 |
| 獨立表空間 | innodb_file_per_table=ON,每表 .ibd 檔案 | 空間回收、遷移、備份彈性 |
ALGORITHM=INPLACE 支援更多操作 (加索引、修改列長度等),LOCK=NONE 實現真正無鎖變更GENERATED ALWAYS AS (expr) VIRTUAL/STORED,可建立索引JSON 型別、JSON_EXTRACT 索引優化SPATIAL INDEX 於 InnoDB 可用INNODB_METRICS、INNODB_TEMP_TABLE_INFO 等新增監控表SHOW ENGINES 確認 InnoDB | DEFAULTinnodb_buffer_pool_size = 物理記憶體 60-80% (專用 DB 伺服器)innodb_file_per_table=ON (5.6.6+ 預設開啟)SHOW ENGINE INNODB STATUS 輸出的 SEMAPHORES、TRANSACTIONS、FILE I/O 等區塊掌握官方文件定義的標準行為與配置,是穩健運維 MySQL 的基礎。