【问题标题】:fast way to insert into database using java使用java插入数据库的快速方法
【发布时间】:2023-03-20 07:31:01
【问题描述】:

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

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 较小个批次执行它可能会更快。
  • this question 中,得出的结论是你的做法是最快的,因为语句只需要解析一次。它适用于 Oracle 而不是 MySql,但我认为同样的考虑也适用于此。
  • 好的,我将尝试创建较小的批次并执行,看看它是否对执行时间有任何影响。谢谢
  • 由于您使用的是 MySQL,您可能希望使用 rewriteBatchedStatements=true,如 this answer 中所述。
  • 哇!该语句将插入 100k 值所需的时间从大约 20 分钟 + 减少到仅 5 秒。这是惊人的。非常感谢戈德·汤普森。

标签: java mysql database performance jdbc


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    当你有一个大批量时,还有很多其他的事情。所以“太大”会减慢行数/秒。这取决于一些设置、特定的表架构和其他内容。我看到过大的批次运行速度是文明批次的两倍。

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-09
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      相关资源
      最近更新 更多