返回顶部
首页 > 资讯 > 数据库 >MyBatis批量插入耗时踩坑经验浅谈
  • 759
分享到

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

mybatismysql数据库Java 2023-09-07 08:09:36 759人浏览 薄情痞子
摘要

问题 因项目有新功能需求,看完需求后,开始无脑写bug,写完开始调bug,因为功能原因,我在写业务逻辑的时候部分的数据采用了批量保存,没多想,懒的写sql就直接用了mybatis自带的saveBatc

问题

项目有新功能需求,看完需求后,开始无脑写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条数据,但实际比较下来确实是手写的这种更快写,我也没看为啥,了解的可以直接评论告诉我
在这里插入图片描述
在这里插入图片描述

总结

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

来源地址:https://blog.csdn.net/qq_35735865/article/details/128929791

您可能感兴趣的文档:

--结束END--

本文标题: MyBatis批量插入耗时踩坑经验浅谈

本文链接: https://lsjlt.com/news/397918.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MyBatis批量插入耗时踩坑经验浅谈
    问题 因项目有新功能需求,看完需求后,开始无脑写bug,写完开始调bug,因为功能原因,我在写业务逻辑的时候部分的数据采用了批量保存,没多想,懒的写sql就直接用了MyBatis自带的saveBatc...
    99+
    2023-09-07
    mybatis mysql 数据库 Java
  • 浅谈golang fasthttp踩坑经验
    一个简单的系统,结构如下: 我们的服务A接受外部的http请求,然后通过golang的fasthttp将请求转发给服务B,流程非常简单。线上运行一段时间之后,发现服务B完全不再接收...
    99+
    2024-04-02
  • 浅谈MyBatis原生批量插入的坑与解决方案
    目录原生批量插入的“坑”解决方案分片 Demo 实战原生批量插入分片实现总结前面的文章咱们讲了 MyBatis 批量插入的 3 种方法:循环单次插入、MyBatis Plus 批量插...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作