当前位置: 首页 > 面试题库 >

JDBC批处理插入性能

徐鑫鹏
2023-03-14
问题内容

我需要将几亿条记录插入mysql db。我要一次插入一百万个。请在下面查看我的代码。它似乎很慢。有什么方法可以优化它吗?

try {
        // Disable auto-commit
        connection.setAutoCommit(false);

        // Create a prepared statement
        String sql = "INSERT INTO mytable (xxx), VALUES(?)";
        PreparedStatement pstmt = connection.prepareStatement(sql);

        Object[] vals=set.toArray();
        for (int i=0; i<vals.length; i++) {
            pstmt.setString(1, vals[i].toString());
            pstmt.addBatch();
        }

        // Execute the batch
        int [] updateCounts = pstmt.executeBatch();
        System.out.append("inserted "+updateCounts.length);

问题答案:

我在mysql中遇到类似的性能问题,并通过在连接URL中设置useServerPrepStmts和rewriteBatchedStatements属性来解决。

Connection c = DriverManager.getConnection("jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true", "username", "password");


 类似资料:
  • 问题内容: 我有一个数据模型,该数据模型在一个实体和其他11个实体之间具有一对多关系。这12个实体一起代表一个数据包。我遇到的问题是与这些关系的“许多”方面发生的插入次数有关。其中一些可以具有多达100个单独的值,因此要将一个完整的数据包保存在数据库中,最多需要500次插入。 我正在将MySQL 5.5与InnoDB表一起使用。现在,通过测试数据库,我发现在处理批量插入时,它每秒可以轻松地每秒进行

  • 我正在使用vertx的JDBC lib,我需要批量插入包含数组字段的值。 我试过: 我的输出: 在切换到准备好的报表之前,我的工作要求是: 我的数据库是Apache Phoenix,是Hbase的sql层。 知道怎么解决吗?

  • 问题内容: 我有一个dao,它基本上使用hibernate将记录插入到一​​个表中,该dao用标记为注释,并且我有一个服务,该服务会生成其他一些东西,然后调用我的dao。我的服务也标注了使用。 我叫服务循环。我在dao上的插入内容是否可以批量或一个接一个地工作?我如何确定它们可以批量工作?hibernateTransaction Manager是否管理批处理插入? 我正在使用Oracle DB。

  • 我的批处理插入器有奇怪的问题。批处理插入器工作良好,但当我从该位置启动服务器时,CYPHER无法筛选属性。 Query返回所有节点。但当我尝试基于任何属性筛选它时,它不会返回任何行。查询不返回任何内容。 如果我运行run SET命令来更新属性,那么我就能够很好地筛选它。看起来像是索引问题,但无法准确计算。

  • 主要内容:使用Statement对象进行批处理,使用PrepareStatement对象进行批处理批量处理允许将相关的SQL语句分组到批处理中,并通过对数据库的一次调用来提交它们,一次执行完成与数据库之间的交互。 一次向数据库发送多个SQL语句时,可以减少通信开销,从而提高性能。 不需要JDBC驱动程序来支持此功能。应该使用方法来确定目标数据库是否支持批量更新处理。如果JDBC驱动程序支持此功能,该方法将返回。 ,和的方法用于将单个语句添加到批处理。 用于执行组成批量的所有语句。 返回一个整数

  • 在我的项目中配置了以下内容: 加载文件时,我有重复的记录,但因为我配置了在下,Spring batch不应回滚记录,但仍将回滚记录。如果我从列表中删除,那么它将抛出异常。我们正在使用Spring批处理版本: 不希望回滚记录,但会回滚记录。