批量插入数据SQL写法,批量处理数据
今天在进行功能优化中遇到了碰到了一个功能,要处理10万条数据。在最开始开发时没有考虑那么多直接以单条数据来处理没有考虑到大批量数据的情况,导致功能不符合预期。那就优化呗。。。
首先考虑。减少与数据库的交互,把之前的一条一条查的代码优化为一次性全部查出,然后在批量处理数据。如果数据量太大(超2万)直接用SQL去批量处理有可能会报错,那是因为数据库单次处理数据的能力有限所以可以分批次处理。下面贴上示例;
**1:**批量插入数据的SQL ,xml文件编写

<!--批量插入--><insert id="insertBanch">insert into "SZFMIMP"."T_STOCK_HISTORY_RESULT" (id,zccl,sbsj,sss,ssqh,crsj,kddm,kdmc,type,lspzid,lspzmc,qymc,qytyshxydm)values<foreach collection="list" item="item" index="index" separator=",">( #{item.id},#{item.zccl},#{item.sbsj},#{item.sss},#{item.ssqh},#{item.crsj},#{item.kddm},#{item.kdmc},#{item.type},#{item.lspzid},#{item.lspzmc},#{item.qymc},#{item.qytyshxydm})</foreach></insert>

2: 查出的几万条数据分批次批量插入,时间会比单条处理效率快很多。亲测在没有优化前5万条数据处理需要大概3分钟左右。优化批量处理后处理时间缩短至5秒。

List<StockHistoryResultPo> list = stockInMapper.getFoodCount(lsxzList).parallelStream().map(tmp -> {StockHistoryResultPo stockHistoryResultPo = new StockHistoryResultPo();//数据转换:仅做参考}).collect(Collectors.toList());stockHistoryResultMapper.delete(new LambdaQueryWrapper<StockHistoryResultPo>().eq(StockHistoryResultPo::getType,2));int count = 2000;List<StockHistoryResultPo> list1 = new ArrayList<>();for (int i = 0; i < list.size(); i++) {list1.add(list.get(i));if((count == list1.size()) || (i == list.size() - 1)){//一次处理2000条数据,处理到最后一条数据跳出循环int j = stockHistoryResultMapper.insertBanch(list1);if(j > 0){log.info("批量数据为:{}",JSON.toJSON(list1));}//清除集合list1.clear();}}

内容仅为个人学习笔记记录,仅供参考!如有更好的思路和写法欢迎指导。

批量插入数据SQL写法,批量处理数据相关推荐

  1. Oracle数据库:实现批量插入的sql语句

    目录 问题现象: 问题分析: 注意:这里一定要注意分号(;)的使用: 否则容易出现报错,如: 解决方法: 问题现象: 今天想使用Oracle数据库进行批量插入的操作,发现和想象中的不太一样,报错如下: ...

  2. Sql批量插入时如果遇到相同的数据怎么处理

    测试数据 -- 创建测试表1 CREATE TABLE `testtable1` ( `Id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `UserId` I ...

  3. mysql构建器 批量插入_mysqlbatch: mysql的批量执行工具,可以在多台mysql服务器上执行指定的SQL语句,支持sharding,比如在sharding之后的表上批量创建索引...

    MySQL Sharding 批量执行工具 主要功能 批量建库.批量建表.批量执行SQL脚本(创建索引.修改表结构).Sharding使用情况分析 使用方法 python ./mysqlbatch.p ...

  4. oracle批量插入ORA-00933: SQL 命令未正确结束

    oracle 不支持 insert into 表名 (column1,column2,column3)values (value1,value2,value3),((value1,value2,val ...

  5. c mysql批量插入优化_MySQL实现批量插入以优化性能的教程

    这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时 ...

  6. Mybatis 针对ORACLE和MYSQL的批量插入与多参数批量删除

    今天利用Mybatis的<for each>标签做oracle的批量插入数据时,发现和MySQL数据库有区别.在此记录下,以防之后再踩坑. 一.批量插入: 1.controller: /* ...

  7. mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

  8. mysql批量插入跟更新_Mysql批量插入和更新的性能

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

  9. php mongodb 批量插入,MongoDB不支持批量插入

    mongodb的结构与关系型数据库不同,它类似树状结构,可以很方便对每个分支进行操作,但它没有像mysql那样insert(value.value.value...)那样的语法,也不支持transac ...

最新文章

  1. php上传图文教程,PHP 上传图片、文件的方法
  2. 电脑打印机共享,打印机共享
  3. tensorflow 线性回归 iris
  4. python画圆简单代码-python实现画圆功能
  5. mysql dump 查看器_mysql备份之mysqldump工具
  6. win7驱动程序未经签名可以使用吗_如何解决高校机房计算机新CPU不支持win7系统的问题...
  7. 设计模式读书笔记-----代理模式
  8. 关于Git下载上传项目的操作指令
  9. 卷积神经网络结构_卷积神经网络
  10. 【kafka】kafka Kafka分区leader迁移
  11. 期货品种产业链图表_工业
  12. 中信证券:降准并非货币宽松 缺口或达9000亿
  13. 51Nod 1378 夹克老爷的愤怒
  14. 常用字符串函数的使用
  15. 202130310164
  16. 涤纶电容的作用原理及优点缺点
  17. WAV 文件格式分析
  18. 华为路由器可以连接几个设备_华为如何设置连接两个无线路由器
  19. 长文图解:金字塔原理如何指导技术系统优化
  20. Cookie由谁设置、怎么设置、有什么内容?

热门文章

  1. 利用Python轻松实现图片相似度对比(一)
  2. 最新版开源 ThinkPHP6云梦卡社区系统源码 亲测可用
  3. theamleaf中radio如何默认选中
  4. IBM SPSS Statistics进行游程检验的相关步骤
  5. 如何制作中药房药柜上的标签
  6. 石头机器人红灯快闪_机器人集体“快闪”活动,闪现天津科
  7. JRTPLIB@Conference DIY视频会议系统系列
  8. python实现链表的删除_Python 实现简易版成绩管理系统
  9. mysql启动的服务程序是什么_MySQL服务启动:某些服务在未由其他服务或程序使用时将自动停止...
  10. 什么NAS能实现多平台同步?AirDisk-Q3X/Q2/Q3S微力同步告诉你怎么实现