• 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>

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

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

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

  • 相关阅读:
    Linux C/C++ 嗅探数据包并显示流量统计信息
    Linux环境搭配
    电赛控制类PID算法实现
    win10音量调节不起作用
    SpringBoot 3.3.1 + Minio 实现极速上传和预览模式
    柯西变异和自适应权重优化的蝴蝶算法-附代码
    Arcgis地理配准栅格数据
    软件测试7大误区
    CTF训练 web安全SQl注入(X-Forwarded-For报文头)
    创建TCP通信与粘包问题解决
  • 原文地址:https://blog.csdn.net/qq_37342720/article/details/113919282