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)这样的一次提交多行的方式插入,但是此方法可能会绕过我们封装的业务代码,因此不太推荐此方法。

  • 相关阅读:
    Django-session+CBV+ORM应用
    Django-session实现登陆
    Django-ORM-操作
    事件委托
    数组去重的方法
    闭包
    Javascript中继承
    函数调用的方式
    原型链的理解
    jsonp
  • 原文地址:https://www.cnblogs.com/mosmith/p/13207065.html
Copyright © 2011-2022 走看看