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

分页查询列表每页1000条的优化

项目中有一个客户列表,要求每页显示1000条,并且字段很多,接口返回大概要10秒钟,进行优化.
原本逻辑:使用mybatisplus构建查询条件,分页查询客户表,查出数据库DO对象,然后for循环转化成回显的VO对象.在转化的过程中出现了查库代码,导致当每页条数1000时,每一个客户转化都需要查询一次,造成了几千次的IO.
前提条件,已经构建了相关的索引.
首次优化,避免在转换VO的过程中出现查库代码,提前收集客户id列表,查询相关的员工信息,部门信息等等,并根据关联id转成一个map,把map直接放到转换代码中,这样只查一次,多次使用
在这里插入图片描述
第二点优化:如果数量大于100条时,每个线程100条,多个线程同时执行
在这里插入图片描述
第三处优化:其实查询sql并不算很慢,但是因为对象很大,转换的过程比较慢,直接使用mybatis查询mybatisplus构建的条件,使查出的结果直接是客户VO而不是客户DO,省略了复制转换的过程
在这里插入图片描述

    Page<ClientListVO> paging(@Param("page") Page<ClientListVO> cachePage, @Param(Constants.WRAPPER) LambdaQueryWrapper<ClientDO> wrapper);
        <select id="paging" resultType="com.ruoyi.system.domain.vo.ClientListVO">
            select * from client ${ew.getCustomSqlSegment}
    </select>

为什么能直接在 MyBatis XML 中使用 Wrapper?
MyBatis-Plus 在底层做了以下处理:

参数绑定:通过 @Param(Constants.WRAPPER) 注解,将 wrapper 对象绑定到 ew 变量名。

SQL 解析:Wrapper 内部会解析你调用的方法(如 eq(), orderBy()),生成对应的 SQL 片段。

变量替换:在 XML 中,${ew.getCustomSqlSegment} 会调用 wrapper.getCustomSqlSegment() 方法,返回生成的 SQL 片段。

经过多次优化以后接口查询1000条仅用时几百毫秒.

相关文章:

  • day1 初识MySQL
  • 词袋模型和TF-IDF(数学公式推导、手动实现、调库使用、示例:使用词袋模型处理多个文档)详解
  • 【前端工程化】-【vue2-ele项目升级】
  • error: failed to run custom build command for `yeslogic-fontconfig-sys v6.0.0`
  • docker 安装 Gitlab
  • 【go】--编译
  • Android基础教程 - 学习完成记录
  • UI基础(1)
  • 【双指针】专题:LeetCode 1089题解——复写零
  • 202527 | RabbitMQ-基础 | 队列 | Direct + Fanout + Topic 交换机 | 消息转换器
  • linux系统安装docker及Qdrant
  • LeetCode 解题思路 38(前 K 个高频元素、数据流的中位数)
  • centos7 yum安装mysql8.0详细步骤(图文教程)
  • java和c#的相似及区别基础对比
  • 如何实现语音智能客服(一)
  • Linux上位机开发实践(OpenCV算法硬件加速)
  • 探索R语言:在线学习资源汇总
  • UE5蓝图之间的通信------接口
  • 安装VS Code 服务器运行版本
  • 第二十四:查看当前 端口号是否被占用
  • 美联储宣布维持基准利率不变
  • 中国证监会:帮助受关税政策影响较大的上市公司纾困解难
  • 日本政府强烈反对美关税政策并要求其取消
  • 新华每日电讯“关爱青年成长”三连评:青春应有多样的精彩
  • 上海环球马术冠军赛开赛,一场体育与假日消费联动的狂欢
  • 旅游特种兵们,这个五一“躲进”书吧