MySQL 支援多種儲存引擎,最常用的是 InnoDB(支援交易、行級鎖、外鍵)與 MyISAM(支援全文索引、讀多寫少場景)。依據業務需求切換引擎非常簡單。
SHOW TABLE STATUS FROM `database_name` WHERE Name = 'table_name';
-- 或查看所有表
SHOW TABLE STATUS FROM `database_name`;
結果中的 Engine 欄位即為目前引擎。
-- 改為 InnoDB
ALTER TABLE `table_name` ENGINE = InnoDB;
-- 改為 MyISAM
ALTER TABLE `table_name` ENGINE = MyISAM;
SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` ENGINE=InnoDB;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_db' AND ENGINE = 'MyISAM';
將輸出的 SQL 複製執行即可完成全庫遷移。
ALTER TABLE ... ENGINE=... 會鎖表重建,大表操作會長時間阻塞寫入,建議使用 pt-online-schema-change 或在低峰期執行。ibdata1),建議開啟 innodb_file_per_table=ON 使用獨立表空間(.ibd 檔案),便於管理與回收空間。| 場景 | 推薦引擎 |
|---|---|
| 高併發寫入、需交易、外鍵 | InnoDB |
| 純讀取、全文搜尋(MySQL 5.6+ InnoDB 也支援) | MyISAM |
| 日誌、暫存表、資料不重要可重建 | MyISAM / MEMORY |