測試環境
| 項目 | 配置 |
| CPU | AMD 2500+ (1.8GHz) |
| 記憶體 | 1GB |
| 硬碟 | 80GB IDE |
| OS | Windows XP SP2 |
| PHP | 5.2.1 |
| MySQL | 5.0.37 |
| Web | IIS 6 |
表結構
CREATE TABLE myisam (id INT AUTO_INCREMENT, name VARCHAR(100), content TEXT, PRIMARY KEY(id)) ENGINE=MyISAM DEFAULT CHARSET=gbk;
CREATE TABLE innodb (id INT AUTO_INCREMENT, name VARCHAR(100), content TEXT, PRIMARY KEY(id)) ENGINE=InnoDB DEFAULT CHARSET=gbk;
測試數據
固定 name='heiyeluren',content 為約 1KB 的 MySQL 存儲引擎介紹文字。
核心測試結果(寫入速度:筆/秒)
場景 1:預設配置 innodb_flush_log_at_trx_commit=1
| 數據量 | MyISAM | InnoDB |
| 1 萬 | 3 | 219 |
| 10 萬 | 29 | 2,092 |
| 100 萬 | 287 | 未測 |
場景 2:innodb_flush_log_at_trx_commit=0
| 數據量 | MyISAM | InnoDB |
| 1 萬 | 3 | 3 |
| 10 萬 | 30 | 29 |
| 100 萬 | 273 | 423 |
場景 3:innodb_buffer_pool_size=1024M(超大緩衝池)
| 數據量 | InnoDB |
| 1 萬 | 3 |
| 10 萬 | 33 |
| 100 萬 | 607 |
場景 4:innodb_buffer_pool_size=256M, innodb_flush_log_at_trx_commit=1, SET AUTOCOMMIT=0
| 數據量 | InnoDB |
| 1 萬 | 3 |
| 10 萬 | 26 |
| 100 萬 | 379 |
預設配置文件
[mysqld]
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=2M
innodb_buffer_pool_size=159M
innodb_log_file_size=80M
innodb_thread_concurrency=8
... (其他參數見原文)
總結與建議
- MySQL 5.0 中 MyISAM 與 InnoDB 效能差距不大,**關鍵在參數調優**。
innodb_flush_log_at_trx_commit=1 導致每次提交刷盤,效能暴跌。**建議設 0 或配合 SET AUTOCOMMIT=0 批次提交**。
innodb_buffer_pool_size 增大有提升,但非線性,需視實際負載平衡。
- InnoDB 擁有事務、行鎖、視圖、存儲程序等優勢,高併發場景表現優於 MyISAM。**良好配置下可全面替代 MyISAM**。
- 非關鍵、低併發 Web 應用仍可用 MyISAM,視業務決策。