什么时候在JDBC上使用批处理操作更快?

时间:2009-08-17 18:04:59

标签: java sql batch-file

我有一段代码在数据库上执行大约500,000次插入。它现在在一个循环中完成,在每次迭代时调用PreparedStatement的executeUpdate。将所有500,000个插入添加到批处理中并且只调用一次executeBatch会更快吗?

3 个答案:

答案 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),但我认为其他一些因素很重要。