我有一段代碼在數據庫上執行大約500,000次插入。它現在在一個循環中完成,每次迭代都會調用PreparedStatement的executeUpdate。將所有500,000個插入添加到一個批次並且只調用一次executeBatch會更快嗎?何時更快地在JDBC上使用批處理操作?
2
A
回答
3
是的,它會更快。請確保先關閉autoCommit,否則您將無法獲得性能優勢。
4
與(從Sun JDBC doc)批量更新設備產量最有效的結果結合使用PreparedStatement的:
// turn off autocommit
con.setAutoCommit(false);
PreparedStatement stmt = con.prepareStatement(
"INSERT INTO employees VALUES (?, ?)");
stmt.setInt(1, 2000);
stmt.setString(2, "Kelly Kaufmann");
stmt.addBatch();
stmt.setInt(1, 3000);
stmt.setString(2, "Bill Barnes");
stmt.addBatch();
// submit the batch for execution
int[] updateCounts = stmt.executeBatch();
1
500.000是太多,一次加入。記住這些記錄保存在內存中並立即發送。將它們分批加入數千個,我沒有注意到批量(使用MySQL)的1000行和10000行之間有任何改進,但我認爲其他一些因素很重要。
+0
對於準備好的語句的小例子來說,它可能是非常可行的。但它真的取決於,我同意... – topchef 2009-08-17 23:19:25
相關問題
- 1. JDBC/JDBCTemplate批處理操作
- 2. JDBC使用彈簧批處理作業
- 3. 使用ping循環批處理操作
- 4. JDBC在發生錯誤時批處理
- 5. 批處理上下文操作模式
- 6. 如何在ListView中啓用批處理上下文操作?
- 7. Symfony批處理操作
- 8. 批處理文本操作
- 9. 在jdbc批處理中處理100,000條記錄更新
- 10. 在JDBC批處理作業中使用多線程
- 11. 使用多線程在python上更快地處理圖像?
- 12. JDBC批處理性能
- 13. 使用Symfony上的Sonata Admin Bundle執行批處理操作
- 14. 使用提示與JDBC調用-spring JDBC批處理
- 15. NHibernate如何實現批處理操作?
- 16. Agda可以在批處理模式下更快地編譯?
- 17. 如何在PreparedStatement中使用JDBC中的批處理SQL?
- 18. JDBC批處理更新和處理異常?
- 19. PutHiveQL如何在批處理上工作?
- 20. 在Sybase中創建JDBC批處理
- 21. 如何使用mysql和php執行批處理操作
- 22. 批處理 - 在FOR循環中使用模 - 錯誤操作數
- 23. 在RESTful產品上處理批量操作回滾
- 24. 批處理操作解析遷移
- 25. 批處理文件中的XML操作
- 26. 批處理文件變量操作
- 27. Windows批處理文件名稱操作
- 28. Windows批處理文件&&操作
- 29. MongoDB和批處理腳本操作
- 30. 休眠批處理操作性能
「更好」是什麼意思?更簡單?更快?更容易維護?較少使用網絡?發生問題時容易回滾? – 2009-08-17 18:06:51
@ S.Lott:假設「更好」意味着在關於SQL的99%問題中「更快」,這是非常安全的。 – 2009-08-17 18:22:04
@ Bill Karwin:有趣的觀察。你怎麼知道?這個問題真的嗎?你怎麼知道*? – 2009-08-17 18:32:47