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>

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

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

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

相关推荐
打码人的日常分享几秒前
企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)
java·数据库·python·需求分析·规格说明书
好好学习的人11 分钟前
SQL第12课——联结表
数据库·sql
程序员古德18 分钟前
系统架构设计师论文《论NoSQL数据库技术及其应用》精选试读
数据库·nosql
青云交27 分钟前
大数据新视界 --大数据大厂之 DataFusion:超越传统的大数据集成与处理创新工具
数据库·内存管理·apache hive·数据集成·大数据处理·datafusion·查询处理·powercenter
s_little_monster30 分钟前
【QT】QT入门
数据库·c++·经验分享·笔记·qt·学习·mfc
hefaxiang1 小时前
【MYSQL】mysql约束---自增长约束(auto_increment)
数据库·mysql
琴智冰1 小时前
SpringBoot
java·数据库·spring boot
AAEllisonPang2 小时前
Oracle 时间计算
数据库·oracle
m0_716499062 小时前
达梦8-数据守护集群主备故障实验和脑裂处理
数据库
小登ai学习2 小时前
简单认识 redis -3 -其他命令
数据库·redis·缓存