• sql逻辑优化


    1.分页 通常使用每页条数及第一页作为参数 开发接口

    1. @GetMapping("/querySystemList")
    2. public List querySystemList(@RequestParam("keyword") String keyword,
    3. @RequestParam(name = "offset", defaultValue = "0") int offset,
    4. @RequestParam(name = "limit", defaultValue = "20") int limit){
    5. HashMap params=new HashMap<>();
    6. if(StringUtils.isNotEmpty(keyword)){
    7. params.put("keyword",keyword);
    8. }
    9. params.put("limit",limit);
    10. params.put("offset",offset);
    11. List systemAduits = systemAduitMapper.querySystemList(params);
    12. return systemAduits;
    13. }

    SQL如下:

    1. <select id="querySystemList" resultMap="systemAduitMap" parameterType="java.util.HashMap">
    2. select * from system_aduit
    3. where 1=1
    4. <if test="keyword!=null and keyword!=''">
    5. and opertion like concat('%',#{keyword},'%')
    6. if>
    7. limit #{offset},#{limit}
    8. select>

    但是当数据量特别大的时候,查询速度会减慢很多,limit 10000,10  查询速度较慢

    于是,在查询下一页数据时 将上一页的最大值当成参数作为查询条件进行查询

    1. @GetMapping("/queryListByParams")
    2. public List queryListByParams(@RequestParam("keyword") String keyword,
    3. @RequestParam("maxTime") String maxTime,
    4. @RequestParam("limit") int limit){
    5. HashMap params=new HashMap<>();
    6. if(StringUtils.isNotEmpty(keyword)){
    7. params.put("keyword",keyword);
    8. }
    9. if(StringUtils.isNotEmpty(maxTime)){
    10. params.put("maxTime",maxTime);
    11. }
    12. params.put("limit",limit);
    13. List systemAduits = systemAduitMapper.queryListByParams(params);
    14. return systemAduits;
    15. }

    SQL如下:

    1. <select id="queryListByParams" resultMap="systemAduitMap" parameterType="java.util.HashMap">
    2. select * from system_aduit
    3. where 1=1
    4. <if test="keyword!=null and keyword!=''">
    5. and opertion like concat('%',#{keyword},'%')
    6. if>
    7. <if test="maxTime!=null and maxTime!=''">
    8. and create_time > #{maxTime}
    9. if>
    10. limit #{limit}
    11. select>

    当数据量特别大的话,查询的速度 还是比较稳定的。

    最近接触的项目,若是数据量很大时,则限制查询日期为一个月;或者定期将数据进行备份到另一个数据库,后查询该库;

    有好的建议,欢迎大家评论!

  • 相关阅读:
    LangChain入门学习笔记(七)—— 使用检索提高生成内容质量
    如何在公司内部统一「数据指标口径」?_光点科技
    微信小程序 - - - input和键盘一起上弹如何实现?
    Java计算百分比保留整数
    01_ue4进阶_PBR材质
    深度学习(18):nerf、nerf-pytorch代码运行与学习
    基于spring gateway 的静态资源缓存实现
    基于SSM的学院就业信息网设计与实现
    数据治理:为什么不见BI作关联分析
    RabbitMQ 服务启动失败问题小结(Windows环境)
  • 原文地址:https://blog.csdn.net/qq_37342720/article/details/113919282