MyBatis批量插入耗时踩坑经验浅谈

文章讲述了在项目开发中遇到的批量插入性能问题,原来使用MyBatis的saveBatch方法耗时较长。通过调整数据库配置(rewriteBatchedStatements=true)和改变插入策略(设置批量插入条数),将3000条数据的插入时间从15秒降低到402毫秒。手写SQL批量插入的效率更高,但作者强调适合自己的解决方案才是最好的。
摘要由CSDN通过智能技术生成

问题

因项目有新功能需求,看完需求后,开始无脑写bug,写完开始调bug,因为功能原因,我在写业务逻辑的时候部分的数据采用了批量保存,没多想,懒的写sql就直接用了MyBatis自带的saveBatch方法,结果调试的时候,好家伙直接给我干懵了,插入3000条数据耗时15秒

排查原因

日常修bug,先看日志,好像也没毛病,于是把sql日志打印出来,我去,居然是一条条insert去执行的,能不耗时吗

解决处理

首先设置执行批量执行sql

在数据库连接配置中设置该属性:rewriteBatchedStatements=true,
不设置好像mysql识别不了还是jdbc识别不了批操作,我比较菜,所以没就这吧,感兴趣可以自行了解
设置支持批量执行sql

设置完开始验证

方法一、直接使用saveBatch方法

效果

设置支持批量执行后,MyBatis自带的saveBatch方法插入结果,批量插入耗时:579(ps:这里当时没细看,以为好了,但发现耗时还是很高,应该是6、 7秒左右,就换了手写sql的方式,后来才发现saveBatch方法是支持设置执行条数的,默认30条数据执行一次,相当于我插入3000条数据执行了100条insert语句)
执行sql的日志详情

方法二、使用saveBatch方法,并设置批量插入条数

这里设置插入3000条,可以明显看到参数条数变多了,3000条组装成一条insert语句
耗时402
在这里插入图片描述

方法三、手写插入语句

手写插入语句

批量插入耗时157
sql执行日志,一次执行3000条,这里也是一条insert语句,虽说和MyBatis的saveBatch方法一样都是一条sql插入3000条数据,但实际比较下来确实是手写的这种更快写,我也没看为啥,了解的可以直接评论告诉我
在这里插入图片描述
在这里插入图片描述

总结

方法千千万,合理的、适合自己的的就是最好的,毕竟功能实现了就行,哈哈哈,要求就是这么低。(有不同想法的批评和建议都接受,欢迎吐槽)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值