SHOW ENGINES;
-- Support 欄位:YES/DEFAULT/NO/DISABLED
-- DEFAULT 表示當前預設引擎
# my.cnf / my.ini
[mysqld]
default-storage-engine=InnoDB
重啟服務生效。新建表將使用 InnoDB,現有表不受影響。
CREATE TABLE mytbl (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MyISAM; -- 或 ENGINE=InnoDB
注意:舊版本用 TYPE=MyISAM 已棄用,請用 ENGINE=。
ALTER TABLE mytbl2 ENGINE = InnoDB;
執行過程:建立新表 → 複製資料 → 切換 → 刪除舊表。大表耗時長、佔用臨時空間、需獨佔鎖(MDL),建議低峰期或用 pt-online-schema-change。
-- 方法 1
SHOW TABLE STATUS FROM db_name WHERE Name='mytbl2';
-- Engine 欄位顯示 InnoDB
-- 方法 2
SHOW CREATE TABLE mytbl2;
-- 末尾顯示 ENGINE=InnoDB
| 場景 | 推薦引擎 | 理由 |
|---|---|---|
| 事務處理(轉帳、訂單) | InnoDB | ACID、行鎖、MVCC、外鍵 |
| 純讀/讀多寫少、全文搜尋 | MyISAM | 壓縮表、全文索引(5.6+ InnoDB 也支援) |
| 高並發寫入 | InnoDB | 行鎖並發度遠優於表鎖 |
| 崩潰恢複要求高 | InnoDB | Redo/Undo Log 保證持久性 |
| 空間資料(GIS) | InnoDB / MyISAM | 5.7+ 皆支援空間索引 |
myisampack 壓縮表唯讀,InnoDB 須用頁壓縮AUTO_INCREMENT:引擎切換保留值,但 InnoDB 重啟後可能重新計算最大值+1mysqldump --single-transaction 僅適用 InnoDB查看引擎用 SHOW ENGINES,修改預設改 my.cnf,單表用 ENGINE= 或 ALTER TABLE ... ENGINE=。生產環境大表變更引擎請用 pt-online-schema-change 避免長時間鎖表。InnoDB 為現代應用首選,MyISAM 退居特定只讀/全文場景。