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

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>

相关文章:

  • 主流 AI 芯片配置
  • 第三章 组件(10)- CSS隔离
  • 【开源免费】基于SpringBoot+Vue.JS医院药品管理系统(JAVA毕业设计)
  • 细说 Java 线程池
  • 使用自动化运维工具 Ansible 集中化管理服务器
  • linux(rocky)设置更新服务器时间
  • 微前端架构深度解码:模块化拆解与联邦宇宙的构建
  • docker简介-学习与参考
  • 本地部署阿里万象2.1文生视频模型(Wan2.1-T2V)完全指南
  • 高性能模拟计算:让计算更快、更智能
  • iOS开发之最新Demo上传Github步骤(2025.02.28)
  • 深度学习之-“全连接网络的反向传播”
  • FFmpeg-chapter3-读取视频流(原理篇)
  • 网络原理 初识[Java EE]
  • 如何在一台服务器上搭建 mongodb副本集1主2从节点
  • linux之crosstool-NG(1)生成toolchain
  • 算法-二叉树篇13-路径总和
  • ARM MTE
  • 【算法】前缀和算法详解
  • Field 对象的使用
  • 专门做问卷的网站/seo技术优化技巧
  • 网站备案有什么要求吗/沧州百度推广公司
  • 青岛网站设计流程/百度推广靠谱吗
  • 做印刷厂网站/百度广告投放技巧
  • python做网站吗/微信营销软件群发
  • 网站开发行业怎么样/河南优化网站