数据量过大,使用saveBatch保存数据太慢如何解决:

数据量过大,使用saveBatch保存数据太慢如何解决:

在使用mybatis-plus的saveBatch方法时发现保存太慢,会生成一大堆的insert,而不是一批一批的,影响因素可能有两个,如下:

1. mybatis-plus使用saveBatch的时候,需要保证字段不为null,如果可能为null的话,在可以在注解上增加忽略

@TableField(value = "manager_name",insertStrategy = FieldStrategy.IGNORED)
    private String	managerName;

这样能保证saveBatch的时候只会有一个insert(当然这也取决于你用的批次大小,默认为1000一次insert)

如果没有特别要求,可以设置全局配置来保障,实际中使用批量保存的其实就特定表,也不是特别建议使用全局的配置,把可能的字段添加忽略就行了。

mybatis-plus:
  global-config:
    db-config:
      insert-strategy: ignored

修改完毕后,insert应该是一批一个insert,而不是一堆

如果需要查看具体原因,可参考,这位小伙伴测试的非常详细,我就不过多赘述了。

Mybatis-Plus saveBatch() 批量保存失效

2. 如果已经是一批一个insert以后,还是慢,则需要修改数据库链接,需要在数据库链接后面增加

rewriteBatchedStatements=true

这样在调用saveBatch的时候时间能得到有效提升

我导入的数据:
在这里插入图片描述
二十三万条,用了不到两分钟

解释:rewriteBatchedStatements=true

MySQL的JDBC连接的url中要加rewriteBatchedStatements参数,并保证5.1.13以上版本的驱动,才能实现高性能的批量插入。
MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。
只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL
另外这个选项对INSERT/UPDATE/DELETE都有效

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杵意

谢谢金主打赏呀!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值