Mysql 批量insert 性能測試
批量執行insert時,有多種執行方式:
1、循環單條執行,類似:
for(){ insert(sql); } |
2、合并為一個事務執行(注:Mysql默認事務是自動提交的,需關閉事務自動提交),類似:
事務begin
for() { insert(sql); } |
事務commit
3、采用insert...values value1,value2批量執行,類似:
insert into table_name values (value1),(value2)...(valueN);
下表是在單機情況下,通過java api調用mysql接口方式執行10,100,500,1000條記錄insert時的性能表格
備注:
1 數據表大小未超過innodb_buffer_pool_size。
2 單條記錄為308個字節,max_allow_packet設置為16M。
3 innodb_flush_log_at_trx_commit=1,單機無binlog。
4 測試中的執行時間只是一個相對值,不同機器表現肯定不一樣。
結論:
1、從實測情況可以知道,在3 的情況下,批量insert性能最高。
2、java api里面的addBatch是1的情形。
造成性能差距的可能原因:
1和2,(1) 1在執行每一條insert時,mysql都會啟動一個事務來跟蹤;而2減少了mysql的事務數。
(2) 減少了事務日志的同步次數。
1和3,(1) 壓縮了網絡通信次數,(2) 減少了sql解析次數,(3) 減少了事務數和日志同步次數。
2和3,減少了sql解析次數。
posted on 2014-02-26 11:03 順其自然EVO 閱讀(520) 評論(0) 編輯 收藏 所屬分類: 數據庫