我有一段代码在数据库上执行大约500,000次插入。它现在在一个循环中完成,在每次迭代时调用PreparedStatement的executeUpdate。将所有500,000个插入添加到批处理中并且只调用一次executeBatch会更快吗?
答案 0 :(得分:4)
将PreparedStatement与批量更新工具结合使用可获得最有效的结果(来自Sun JDBC doc):
// 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 :(得分:3)
是的,它会快得多。确保先关闭autoCommit,否则你将无法获得性能优势。
答案 2 :(得分:1)
500.000太多了,无法一次添加。请记住,这些记录保存在内存中并立即发送。批量添加几千个,我没有注意到批量生成1000到10000行之间有任何改进(使用MySQL),但我认为其他一些因素很重要。