我很好奇我们通过Java循环执行MySQL查询的速度有多快,而且我编写的代码需要花费很长时间。我相信有更快的方法可以做到这一点。以下是执行查询的代码段。
PreparedStatement ps=connection.prepareStatement("INSERT INTO books.author VALUES (?,?,?)");
for (int i=0;i<100000;i++)
{
ps.setString(1,test[i][0]);
ps.setString(2,test[i][1]);
ps.setString(3,test[i][2]);
ps.addBatch();
}
int []p=ps.executeBatch();
非常感谢任何帮助。谢谢
答案 0 :(得分:1)
您的基本方法是正确的。由于您使用的是MySQL,因此可能需要将rewriteBatchedStatements=true
添加到您的连接网址,如this answer中所述。众所周知,它可以显着加快对MySQL数据库的批量INSERT操作。
答案 1 :(得分:0)
当你拥有庞大的批次时,还有很多其他的事情可以发挥作用。所以“太大”将减慢行/秒。这取决于一些设置,特定的表模式和其他内容。我看到一个太大的批次运行速度是一个更文明的批次的两倍。
将解析查询的开销视为等同于插入额外的10行。根据该经验法则,1000行的批量插入在理论最大速度的1%范围内。
可以更快地创建包含所有行的文件并执行LOAD DATA
。但是,这又取决于各种设置等。