zoukankan      html  css  js  c++  java
  • mysql/mybatis insertBatch插入速度太慢了

    比较少用mysql,最近接手一个项目,遇到一个mybatis插入速度很慢的问题,但是看代码mybatis的批量使用的是JDBC的 PrepareStatement.executeBatch,性能应该不至少太差,但是在生产环境居然只有40条/S,太慢了。搜索相关的问题,发现跟连接url的参数有问题,加上&rewriteBatchedStatements=true即可。

    详细参数说明可以参考 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

    测试JDBC时候速度很快,但是到生产环境上仍然很慢,有提升但是不是很显著。于是把生产环境的数据扒下来测试,最后发现是mybatis每一条数据都是一个新的PreparedStatement,本来应该可以重用PrepareStatement的,但是因为每条数据都有不同的情况的NULL值(Mybatis不更新实体的NULL值字段),进而导致了Mybatis每次生成的insert sql语句几乎都不一样,所以每次都得生成一条新的PreparedStatement,不能真正的addBatch和executeBatch。

    因此:

    1、建议数据库/实体尽量不允许NULL值字段 ,这样子批量插入时候Mybatis能够重用生成的PreparedStatement,实现批量提交。

    2、改成INSERT INTO t_xxx VALUES(XXX, XXX), (XXX, XXX)这样的一次提交多行的方式插入,但是此方法可能会绕过我们封装的业务代码,因此不太推荐此方法。

  • 相关阅读:
    底层原理
    No.1
    No.3
    No.0
    php 10进制转62进制,可用于短网址生成
    php实现斐波那契数列
    五种常见的 PHP 设计模式
    PHP利用MySQL保存session
    HTTP相关
    如何优化tomcat配置(从内存、并发、缓存4个方面)优化
  • 原文地址:https://www.cnblogs.com/mosmith/p/13207065.html
Copyright © 2011-2022 走看看