当前位置: 首页 > 知识库问答 >
问题:

JDBC中的批插入需要很长时间

鄢选
2023-03-14

我试图在MSSQL中通过jdbc连接批量插入10K记录,批量插入大约需要18到20秒。我想在3秒内插入。有没有办法快速插入。

下面给出我的代码

public void BatchInsert() {
    PreparedStatement pStmnt = null;
  try {
     final int batchSize = 1000;
     int count = 0;
     Connection con = createConnection();
     long end = System.currentTimeMillis();
     System.out.println("connection creation time :: " + (end - start));
     start = System.currentTimeMillis();
     pStmnt = con.prepareStatement("insert into testtable values(?)");
     for (int i = 1; i <= 10000; i++) {
        pStmnt.setInt(1, i);
        pStmnt.addBatch();

       if (++count % batchSize == 0) {
          pStmnt.executeBatch();
       }
     }
     pStmnt.executeBatch(); // insert remaining records
     end = System.currentTimeMillis();
     System.out.println("total insert time :: " + (end - start));
 } catch (SQLException e) {
     e.printStackTrace();
 } finally {
     try {
       pStmnt.close();
     } catch (SQLException e) {
       e.printStackTrace();
     }
 }
    }

提前谢谢你的帮助。

共有2个答案

贺景铄
2023-03-14

如果您的连接默认为自动提交模式,那么您可以通过以下方式获得性能的显著提高

con.setAutoCommit(false);

在进入循环之前,添加批处理,然后执行

con.commit();

在最后一个执行包之后

越嘉茂
2023-03-14

据我所知,您在数据库表中使用了更多的索引。这就是为什么它需要更多的时间。因此,在插入大小写时,首先您需要以某种方式停止索引(可能是删除和重新创建或删除不必要的索引)。

出于操作目的,您可以从testtable中删除所有索引,然后运行批处理。希望您能获得最短的插入时间。

  1. 索引越多,插入越慢-使用索引,卢克
  2. 基本原理:通过删除未使用的索引来提高插入和更新性能
  1. 在执行INSERT之前,禁用触发器并删除外键。
  2. 执行INSERT设置触发器通常设置的字段,并确保FK列的值有效。
  3. 重新启用触发器,并使用NOCHECK重新创建外键。

归功于@RBarryYoung

  1. SQL服务器插入巨大的表很慢
 类似资料:
  • 我正在通过JDBC准备语句更新远程数据库。当我执行相同的代码来更新本地数据库时,需要几毫秒的时间,但是对于远程数据库来说,大约900行的时间太长了。所有行的大小加起来是160 KB。远程主机是Hostgator,表的数据库引擎是InnoDB。 下面是我的代码:

  • 我使用javamail通过IMAP协议从exchage帐户读取邮件。这些邮件是纯格式的,内容是XML。 几乎所有这些邮件的大小都很短(通常小于100Kb)。然而,有时我不得不处理大型邮件(大约10Mb-15Mb)。例如,昨天我收到一封13Mb大小的电子邮件。仅仅读它就花了50多分钟。这正常吗?有没有办法提高它的性能?代码是: 花费如此长时间的方法是。我做错了什么?有什么提示吗? 非常感谢,我的英语

  • 给出结果需要20多秒,而在mongo控制台中同样的查询需要不到一秒。 为什么会出现这种情况,如何减少速度差距?

  • 我有以下PHP代码在Laravel正在执行一个MySql查询: 执行此查询需要很长时间。 我对所排序的列以及其他查询的许多列都有索引。 我该怎么办? 更新: 执行的查询: 结果:

  • 问题内容: 我在重新整理模型时遇到问题。我训练了模型并使用此代码保存了模型。我不太确定这是否是正确的方法,我将不胜感激。当我尝试还原模型时会发生问题。我只需要预测,就不会再接受过培训了。从模型中恢复参数需要花费很多时间。在我仅需要预测的前提下,如何改进模型保护程序或模型恢复程序以使其快速完成。 恢复: 编辑:也许使用Google Colab的GPU训练模型,然后将其还原到我的PC上这一事实很重要。

  • 在我们的kafka broker设置中,GC平均需要20毫秒,但随机增加到1-2秒。极端情况持续9秒。这种情况的发生频率相当随机。平均每天发生15次。我尝试过使用GCEasy,但没有给出任何见解。我的内存使用率为20%,但进程仍然使用交换,尽管内存可用。感谢您对如何将其最小化的任何意见 JVM选择: GC日志: