首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MyISAM 與 InnoDB 性能實測:自動提交模式對插入速度的驚人影響

     編輯:MySQL 綜合教學

MyISAM vs InnoDB 插入性能實測:關鍵在 autocommit

早期專案中 InnoDB 插入極慢(10 行/秒),改用 MyISAM 達萬行/秒。經測試發現,罪魁禍首是 InnoDB 預設 autocommit=1 且未顯式開啟事務,導致每行隱式提交,產生大量 fsync。

測試環境

  • RedHat Linux 9,4 CPU,2GB RAM,MySQL 4.1.6
  • Python + MySQLdb,插入 10,000 行測試

六種測試場景

表名引擎autocommit事務
MyISAM_NTMyISAMN/A否
MyISAM_TSMyISAMN/A是
INNODB_NA_NBInnoDB0否
INNODB_NA_BEInnoDB0是
INNODB_AU_NBInnoDB1否
INNODB_AU_BEInnoDB1是

測試結果(耗時秒)

MyISAM_NT      2.11
MyISAM_TS      2.65
INNODB_NA_NB   2.52
INNODB_NA_BE   3.86
INNODB_AU_NB   43.72  ← autocommit=1 無事務,極慢
INNODB_AU_BE   3.14

核心結論

  1. autocommit=1 且無顯式事務是性能殺手,每行強制刷盤。
  2. 批量寫入時,務必關閉 autocommit 或顯式 BEGIN/COMMIT。
  3. InnoDB 正確使用下性能接近 MyISAM,且具備事務安全。

最佳實踐

SET autocommit=0;
BEGIN;
INSERT ...;  -- 批量
COMMIT;
-- 或
START TRANSACTION;
INSERT ...;
COMMIT;

切勿在循環中單條提交,應用層連接池亦需注意自動提交設定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved