欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > MySQL调优--12--分批插入/更新数据 ---案例2

MySQL调优--12--分批插入/更新数据 ---案例2

2025/6/24 0:12:23 来源:https://blog.csdn.net/weixin_48052161/article/details/145935198  浏览:    关键词:MySQL调优--12--分批插入/更新数据 ---案例2

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 分批插入案例
    • 1.思路分析
    • 2.表结构
    • 3.业务代码
    • 4.sql


分批插入案例

MySQL调优–11–分批插入/更新数据 —案例

1.思路分析

  1. 第一次进来 查询时间范围内的最小索引最小值
  2. 每次根据唯一索引大于上次查出来的最小值,查一批数据
  3. 更新最小值,循环查询

2.表结构

在这里插入图片描述
在这里插入图片描述

3.业务代码

public class AudienceCustomerReqDTO {private Long audid;private Integer nums;private Date startTime;private Date endTime;private Long minId;private Long maxId;private Integer needCreateTime;private Integer needUpdateTime;
}
if(!complementFlag){List<String> rowList = new ArrayList<>(); //单个文件集合AudienceCustomerReqDTO reqDTO = new AudienceCustomerReqDTO();reqDTO.setNums(3000);reqDTO.setStartTime(startDate);reqDTO.setEndTime(endDate);//循环查询数据while (true){ApiResponse<List<AudienceCustomerDTO>> response = audienceFeign.esQueryCustomer(reqDTO);ApiResponse.checkApiResponse(response);if (response == null || CollectionUtils.isEmpty(response.getData())) {//结束前检查兜底写入文件if (rowList.size() > 0) {writeFile(file, rowList);rowList.clear();}break;}List<AudienceCustomerDTO> dtoList = response.getData();//解析数据放入内存dtoListphaseData(dtoList,rowList);//10万一批写入文件if (rowList.size() >= 100000) {writeFile(file, rowList);file_num += rowList.size();rowList.clear();}//查询下一批数据AudienceCustomerDTO lastElement = dtoList.get(dtoList.size() - 1);reqDTO.setAudid(lastElement.getAudid());}}
    @Overridepublic List<AudienceCustomerDTO> esQueryCustomer(AudienceCustomerReqDTO reqDTO) {//第一次进来 查询时间范围内的最小audidif(reqDTO.getAudid()==null){AudMinMaxIdDTO minMaxId= audienceCustomerMapper.getMinMaxIdBetweenUpdateTime(reqDTO);if(minMaxId==null){log.info("该时间范围没有更新数据,request: {}",JSONObject.toJSONString(reqDTO));return null;}reqDTO.setAudid(minMaxId.getMinId()-1);}List<AudienceCustomerDTO> dtoList = audienceCustomerMapper.selectSingleAudienceTable(reqDTO);return dtoList;}

4.sql

    <select id="getMinMaxIdBetweenUpdateTime" resultType="dto.response.AudMinMaxIdDTO">select MIN(audid) as minId,MAX(audid) as maxId from t_audience_customer<where><if test="param.startTime != null">and update_time <![CDATA[>=]]> #{param.startTime}</if><if test="param.endTime != null">and update_time <![CDATA[<=]]> #{param.endTime}</if></where></select><select id="selectSingleAudienceTable" resultType="dto.AudienceCustomerDTO">select<include refid="baseColumns"/>from t_audience_customerwhere audid > #{param.audid}<if test="param.startTime != null">and update_time <![CDATA[>=]]> #{param.startTime}</if><if test="param.endTime != null">and update_time <![CDATA[<=]]> #{param.endTime}</if>order by audid asclimit #{param.nums}</select>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com