当前位置: 首页 > article >正文

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();
                //解析数据放入内存dtoList
                phaseData(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());
            }

        }
    @Override
    public List<AudienceCustomerDTO> esQueryCustomer(AudienceCustomerReqDTO reqDTO) {
        //第一次进来 查询时间范围内的最小audid
        if(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_customer
        where 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 asc
        limit #{param.nums}
    </select>

http://www.kler.cn/a/570192.html

相关文章:

  • java数据结构_Map和Set(一文理解哈希表)_9.3
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.1.3时间序列数据优化(Rollover + ILM策略)
  • 如何通过rust实现自己的web登录图片验证码
  • 【一文读懂】卷积神经网络(CNN)基础详解
  • AI浏览器BrowserUse:Docker运行环境准备(三)
  • 微信小程序自定义导航栏,胶囊菜单按钮高度适配问题
  • 23种设计模式之《中介者模式(Mediator)》在c#中的应用及理解
  • 反向代理模块j
  • AI本地化部署:全球AI芯片与服务器需求的新引擎
  • Python库collections详解 (一)
  • DeepBI:AI驱动的亚马逊智能决策引擎
  • 如何合理设置请求间隔?
  • 【Prometheus】prometheus如何监控k8s集群
  • 安卓基础组件Looper - 02 native层面的剖析
  • 失去的讨论区
  • Oracle 11g的部署配置
  • 字节跳动系统攻防算法岗-Flow安全内推
  • 《2025软件测试工程师面试》接口框架TestNg篇
  • 信息收集学习笔记,以及ctfshow的一些题目
  • xcode开发:Info.plist: No such file or directory 问题,苹果开发:no such file 问题解决办法