sql逻辑优化

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

java 复制代码
@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如下:

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

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

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

java 复制代码
@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如下:

XML 复制代码
<select id="queryListByParams" resultMap="systemAduitMap" parameterType="java.util.HashMap">
	select * from system_aduit
	where 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>

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

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

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

相关推荐
专业软件系统开发27 分钟前
药品说明书查询系统源码 本地数据库 PHP版本
数据库·查询系统源码·说明书查询源码
冉冰学姐4 小时前
SSM足球爱好者服务平台i387z(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架·足球爱好者服务平台
大飞记Python4 小时前
部门管理|“编辑部门”功能实现(Django5零基础Web平台)
前端·数据库·python·django
清风6666666 小时前
基于单片机的智能收银机模拟系统设计
数据库·单片机·毕业设计·nosql·课程设计
资深低代码开发平台专家6 小时前
PostgreSQL 18 发布
数据库·postgresql
与衫7 小时前
在 VS Code 里看清你的数据流向:Gudu SQL Omni 实测体验
数据库·sql
Element_南笙7 小时前
吴恩达新课程:Agentic AI(笔记2)
数据库·人工智能·笔记·python·深度学习·ui·自然语言处理
长安城没有风8 小时前
从入门到精通【Redis】Redis 典型应⽤ --- 分布式锁
数据库·redis·分布式
Ytadpole8 小时前
MySQL 数据库优化设计:优化原理和数据库表设计技巧
数据库·mysql·优化·索引·查询·检索·表设计