我有一段代码在数据库上执行大约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使用弹簧批处理作业
- 2. 使用ping循环批处理操作
- 3. JDBC在发生错误时批处理
- 4. Symfony批处理操作
- 5. 在jdbc批处理中处理100,000条记录更新
- 6. 在JDBC批处理作业中使用多线程
- 7. 使用多线程在python上更快地处理图像?
- 8. 使用Symfony上的Sonata Admin Bundle执行批处理操作
- 9. NHibernate如何实现批处理操作?
- 10. Agda可以在批处理模式下更快地编译?
- 11. 如何在PreparedStatement中使用JDBC中的批处理SQL?
- 12. PutHiveQL如何在批处理上工作?
- 13. 在Sybase中创建JDBC批处理
- 14. 批处理 - 在FOR循环中使用模 - 错误操作数
- 15. 在RESTful产品上处理批量操作回滚
- 16. MongoDB和批处理脚本操作
- 17. 批处理文件中的XML操作
- 18. 批处理操作解析迁移
- 19. 休眠批处理操作性能
- 20. 批处理文件字符串操作
- 21. 批量数组操作比顺序操作更快吗?
- 22. 快速操作后处理对话
- 23. 如何使用批处理
- 24. 如何使用批处理
- 25. 如何使用批处理
- 26. 批处理sqlcmd使用大于/小于操作数
- 27. WCF使用批量操作进行异常处理
- 28. 使用ArcCatalog创建python批处理图像操作
- 29. 以批处理模式选择JDBC SQL
- 30. JDBC批处理查询高性能
“更好”是什么意思?更简单?更快?更容易维护?较少使用网络?发生问题时容易回滚? – 2009-08-17 18:06:51
@ S.Lott:假设“更好”意味着在关于SQL的99%问题中“更快”,这是非常安全的。 – 2009-08-17 18:22:04
@ Bill Karwin:有趣的观察。你怎么知道?这个问题真的吗?你怎么知道*? – 2009-08-17 18:32:47