使用java插入数据库的快速方法

时间:2017-04-27 13:06:41

标签: java mysql database performance jdbc

我很好奇我们通过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();

非常感谢任何帮助。谢谢

2 个答案:

答案 0 :(得分:1)

您的基本方法是正确的。由于您使用的是MySQL,因此可能需要将rewriteBatchedStatements=true添加到您的连接网址,如this answer中所述。众所周知,它可以显着加快对MySQL数据库的批量INSERT操作。

答案 1 :(得分:0)

当你拥有庞大的批次时,还有很多其他的事情可以发挥作用。所以“太大”将减慢行/秒。这取决于一些设置,特定的表模式和其他内容。我看到一个太大的批次运行速度是一个更文明的批次的两倍。

将解析查询的开销视为等同于插入额外的10行。根据该经验法则,1000行的批量插入在理论最大速度的1%范围内。

可以更快地创建包含所有行的文件并执行LOAD DATA。但是,这又取决于各种设置等。