分页查询接口优化

背景

业务中一个简单查询接口耗时25s+,排查日志发现20s都浪费在一句mybatis-plus自动生成的count sql上,原来采用mybatis-plus 的分页插件
编写的分页查询方法会自动在查询sql执行之前执行一句目标查询方法_mpCount,该方法简单的将原来的查询结果作为子查询,外面包了一层
slect count(*) from (目标sql)

select * from data_file d
        left join permission p
        on d.permission_group_id = p.permission_group_id
        WHERE  d.file_name LIKE CONCAT('1','%') 
        group by d.id
        ORDER BY  create_time   
        desc LIMIT 10;

问题分析

当遇到查询结果很多时或是一些复杂查询该sql会把所有结果全部查出来进行计数,比目标sql的执行速度慢很多,因此考虑优化count SQL,禁用mybatis-plus的自动
count SQL,手动写mapper查询total

// 禁用自动count sql
page.setSearchCount(false);

// 手动count
page.setTotal(baseMapper.selectByConditionAndIdsAndUser_COUNT( request, null, userInfo));

优化后的count SQL

count SQL 目的是为了计算分页的总页数,因此只要自定义的sql计算出的比实际的大,不会影响实际使用,因此去除连表条件,
优化后的sql如下,

select * from data_file d
        WHERE  d.file_name LIKE CONCAT('1','%') 
        group by d.id
        ORDER BY  create_time   
        desc LIMIT 10;

本文作者:Joe's blog

本文链接:https://www.cnblogs.com/rise0111/p/17171955.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   FromZeroToOne  阅读(207)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.