首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MyISAM vs InnoDB 插入效能實測:AUTOCOMMIT 才是關鍵變數

     編輯:MySQL 資料庫相關知識

測試環境與設計

  • 環境:RedHat Linux 9,4 CPU,2GB RAM,MySQL 4.1.6
  • 語言:Python + MySQLdb
  • 測試:插入 10,000 筆簡單記錄
  • 6 種配置組合:MyISAM(事務/無事務)、InnoDB(4 種 AUTOCOMMIT/事務組合)

關鍵發現:AUTOCOMMIT=1 是效能殺手

配置耗時(秒)相對效能
MyISAM 無事務2.11基準 100%
MyISAM 有事務2.6580%
InnoDB AUTOCOMMIT=0 無事務2.5284%
InnoDB AUTOCOMMIT=0 手動事務3.8655%
InnoDB AUTOCOMMIT=1 無事務43.724.8%
InnoDB AUTOCOMMIT=1 手動事務3.1467%

核心結論

  1. InnoDB 預設 AUTOCOMMIT=1 導致每 INSERT 都 fsync 刷盤,效能暴跌 20 倍
  2. 關閉 AUTOCOMMIT + 手動事務 可達 MyISAM 同等級效能
  3. MyISAM 不支援事務,BEGIN/COMMIT 只是語法兼容,實際無效

生產環境最佳實踐

-- 連線池初始化時執行
SET SESSION autocommit = 0;

-- 批次寫入模板
START TRANSACTION;
INSERT ...; INSERT ...; ... (批次 1000~5000 行)
COMMIT;

-- 異常時
ROLLBACK;

補充說明

  • MySQL 5.6+ innodb_flush_log_at_trx_commit=2 可折衷效能與安全
  • 大量匯入建議:SET unique_checks=0; SET foreign_key_checks=0; 匯入後再開啟
  • 使用 LOAD DATA INFILE 效能遠超 INSERT 批次
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved