当前位置:   article > 正文

关于mybatis,foreach插入大量数据过慢的测试与解决_sqlsession.flushstatements();

sqlsession.flushstatements();

长不看的结论:数据库链接的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();
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

今天是更新了一下本地的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
通宵到现在,赶紧睡觉了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/158276
推荐阅读
相关标签
  

闽ICP备14008679号