萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 儲存引擎選型指南:InnoDB vs MyISAM 核心差異與遷移實務

核心差異對照

特性InnoDBMyISAM
事務支援✅ ACID、行級鎖、MVCC❌ 無事務、表級鎖
外鍵約束✅❌
崩潰恢復✅ Redo/Undo Log 自動恢復❌ 需手工 REPAIR TABLE
並發效能高並發寫入優秀讀多寫少場景較快
全文索引5.6+ 支援早期支援
資料壓縮頁面壓縮、透明壓縮支援 myisampack 唯讀壓縮
跨平台複製需邏輯備份/還原.MYD/.MYI 可直接跨 OS 複製
預設引擎5.5+ 預設5.5 前預設

選型決策樹

  1. 需要事務/外鍵/高並發寫入 → InnoDB。
  2. 純讀/靜態資料、全文搜尋 (舊版)、跨平台檔案複製 → MyISAM。
  3. 不確定 → InnoDB (通用最佳實踐)。

引擎轉換

-- 單表
ALTER TABLE tbl_name ENGINE = InnoDB;

-- 批量 (配合 73012 文章 SQL)
SELECT GROUP_CONCAT(CONCAT('ALTER TABLE `', TABLE_NAME, '` ENGINE=InnoDB;') SEPARATOR ' ')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_name' AND ENGINE = 'MyISAM';

注意:轉換會鎖表重建,大表建議用 pt-online-schema-change 在線轉換。

InnoDB 效能關鍵參數

innodb_buffer_pool_size = 70% 物理記憶體
innodb_log_file_size = 1-4G
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_thread_concurrency = 0  # 0=自動

常見誤區

  • 「MyISAM 總是比 InnoDB 快」:僅在純讀、全表掃描、無並發寫入時略快;實際業務多為混合負載,InnoDB 總體優勢明顯。
  • 「InnoDB 不支援全文索引」:5.6 起原生支援,語法同 MyISAM。
  • 「AUTOCOMMIT=ON 就不需要 BEGIN」:大量寫入必須顯式 BEGIN; ... COMMIT; 合併事務,否則每條 INSERT 觸發 fsync 效能極差。

遷移檢查清單

  1. 確認無外鍵依賴 MyISAM 表(需同步轉換)。
  2. 備份資料庫(mysqldump --single-transaction --master-data=2)。
  3. 低峰期執行 ALTER TABLE 或在線工具。
  4. 轉換後執行 ANALYZE TABLE 更新統計。
  5. 驗證應用功能、效能基準測試。
copyright © 萬盛學電腦網 all rights reserved