当前位置:首页 > 编程笔记 > 正文
已解决

sql逻辑优化

来自网友在路上 177877提问 提问时间:2023-11-08 14:53:13阅读次数: 77

最佳答案 问答题库778位专家为你答疑解惑

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

@GetMapping("/querySystemList")
public List<SystemAduit> querySystemList(@RequestParam("keyword") String keyword,@RequestParam(name = "offset", defaultValue = "0") int offset,@RequestParam(name = "limit", defaultValue = "20") int limit){HashMap<String,Object> params=new HashMap<>();if(StringUtils.isNotEmpty(keyword)){params.put("keyword",keyword);}params.put("limit",limit);params.put("offset",offset);List<SystemAduit> systemAduits = systemAduitMapper.querySystemList(params);return systemAduits;
}

SQL如下:

<select id="querySystemList" resultMap="systemAduitMap" parameterType="java.util.HashMap">select * from system_aduitwhere 1=1<if test="keyword!=null and keyword!=''">			and opertion  like concat('%',#{keyword},'%')</if>limit #{offset},#{limit}
</select>

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

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

@GetMapping("/queryListByParams")
public List<SystemAduit> queryListByParams(@RequestParam("keyword") String keyword,@RequestParam("maxTime") String maxTime,@RequestParam("limit") int limit){HashMap<String,Object> params=new HashMap<>();if(StringUtils.isNotEmpty(keyword)){params.put("keyword",keyword);}if(StringUtils.isNotEmpty(maxTime)){params.put("maxTime",maxTime);}params.put("limit",limit);List<SystemAduit> systemAduits = systemAduitMapper.queryListByParams(params);return systemAduits;
}

SQL如下:

<select id="queryListByParams" resultMap="systemAduitMap" parameterType="java.util.HashMap">select * from system_aduitwhere 1=1<if test="keyword!=null and keyword!=''">and opertion  like concat('%',#{keyword},'%')</if><if test="maxTime!=null and maxTime!=''">and create_time  &gt; #{maxTime}</if>limit #{limit}
</select>

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

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

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

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"sql逻辑优化":http://eshow365.cn/6-35417-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!