关于mybatis,foreach插入大量数据过慢的测试与解决

长不看的结论:数据库链接的url中加入“&rewriteBatchedStatements=true”,然后使用sqlSession得到mapper来单次提交,最后flushStatements()提交给数据库,这样十几万的插入在2s左右

具体代码:

private void batchInsert(List<xxxEntity> list){
		SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH);
		xxxDao mapper = sqlSession.getMapper(xxxDao.class);
		list.forEach(a->mapper.addTextPath(a));
		//提交到数据库,保存数据
		sqlSession.flushStatements();
	}

今天是更新了一下本地的txt路径,需要从头大批量插入,一次大约150k行
之前从某面试笑话看到foreach标签,去学了一下使用,这次就简单用上了,但是效果非常不理想:
在表结构和插入的数据(每行)都很少的情况下
在这里插入图片描述在这里插入图片描述
(只插入两列数据,可以说是最简单的插入了)

依然花了三分多钟:这比起程序里面一个for然后单条插入快不到那里去

搜到了一些博客,关于原理的东西或许可以参考:

https://www.jb51.net/article/266338.htm

但是后面我按照减小单次数量的方法,1w条插一次,仍然需要10s左右,稍微快了一点,还是很慢
在这里插入图片描述
(可以看到还试过在程序里拼接values语句然后传给sql,但是因为txt名特殊字符很多,这样很容易出错;此外,把foreach写法里面#{item}换成${item}之类的也没有加快速度,反而因为单纯拼接出错了)

后面参考了

https://blog.csdn.net/a1029573879a/article/details/121536009

,但是仍然是几分钟的数量级——最后发现关键是数据库链接设置成spring.datasource.url=jdbc:mysql://localhost:3306/………………&rewriteBatchedStatements=true

不过,加入这个设置可以让上面那个博客的方法从几分钟提到2s,但是对于foreach似乎并没有改善,仍然很慢.

好了不细说了.jpg
通宵到现在,赶紧睡觉了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值