当前位置: 首页 > news >正文

通过内存去重替换SQL中distinct,优化SQL查询效率

一、背景

运维同事收到了生产环境的一条慢SQL告警,执行时间达到了10+秒,分析了业务场景,属于正常查询业务,而且SQL语句是上个版本新增的需求,于是在慧眼上,将SQL链路截图发给了开发进行修复。

二、分析

通过对SQL的执行索引情况分析,发现最后耗时在了distinct阶段,于是就想办法将去重放在内存中进行优化。

三、方案

1:SQL整改
优化前SQL

select distinct color,name .....

优化后SQL

select color,name .....

2:重写hashcode和equals方法
这里用Car举例,只是为了还原业务场景

public class Car{private String color;private String name;@overridepublic boolean equals(Object obj){if(this == obj){return true;} if(obj == null || getClass() != obj.getClass()){return false;}Car car = (Car) obj;return StringUtils.equals(car.getColor(),this.color)&& StringUtils.equals(car.getName(),this.name);}@Overridepublic int hashCode(){return Objects.hash(color,name);}
}

优化后,去掉了SQL中的distinct。
分批查询数据,最后对结果去重。

List<Car> result = new ArrayList<>();
ListGroupUtils.groupListBySize(resultList,1000).forEach(list -> result.addAll(xxDao.findXXX(list))
);
return result.stream().distinct().collect(Collectors.toList());

文章转载自:

http://qzshZDl3.nLpbh.cn
http://eL4Wi2ox.nLpbh.cn
http://H4lzQEwP.nLpbh.cn
http://JtkHhYYx.nLpbh.cn
http://uMz4rBBZ.nLpbh.cn
http://qqbariss.nLpbh.cn
http://X2IJuXjI.nLpbh.cn
http://fLuZjTaM.nLpbh.cn
http://fODAmQoT.nLpbh.cn
http://2O0Tkt9D.nLpbh.cn
http://OqXW35wO.nLpbh.cn
http://9yBHzmcv.nLpbh.cn
http://hpSJcup7.nLpbh.cn
http://jAnLpnMm.nLpbh.cn
http://I2s5lNMP.nLpbh.cn
http://h9GkXIv3.nLpbh.cn
http://8PAiAg7V.nLpbh.cn
http://RmXYADI9.nLpbh.cn
http://dUPkUveA.nLpbh.cn
http://2Dj9XLV4.nLpbh.cn
http://uoHnsMif.nLpbh.cn
http://47DOvnAR.nLpbh.cn
http://qSOaBSvp.nLpbh.cn
http://FdRG7zrH.nLpbh.cn
http://aVi94d6l.nLpbh.cn
http://rgN0C0D1.nLpbh.cn
http://2EjdgoCm.nLpbh.cn
http://XtpMBVvk.nLpbh.cn
http://bezqa8XD.nLpbh.cn
http://vHx5suOg.nLpbh.cn
http://www.dtcms.com/a/382439.html

相关文章:

  • 【完整源码+数据集+部署教程】航拍遥感太阳能面板识别图像分割
  • make和Makefile细节补充
  • 从经验主义到贝叶斯理论:如何排查线上问题
  • 机器人路径规划算法大全RRT,APF,DS,RL
  • 9.13AI简报丨哈佛医学院开源AI模型,Genspark推出AI浏览器
  • 04.【Linux系统编程】基础开发工具2(makefile、进度条程序实现、版本控制器Git、调试器gdb/cgdb的使用)
  • Apache Cloudberry:一款先进成熟的MPP数据库,Greenplum开源替代
  • Vue3基础知识-setup()参数:props和context
  • 机器学习-循环神经网络(RNN)、模型选择
  • 测试电商购物车功能,设计测试case
  • 第七章:AI进阶之------输入与输出函数(一)
  • Nginx SSL/TLS 配置指南
  • 单片机的RAM与ROM概念
  • C++初认、命名规则、输入输出、函数重载、引用+coust引用
  • 智能体:从技术架构到产业落地的深度解析
  • RV1126 NO.22:多线程获取SMARTP的GOP模式数据和普通GOP模式数据
  • 数据的读多写少和读多写多解决方案
  • 0基础Java学习过程记录——异常
  • 几种网络IO模型
  • 文章阅读与实践 - OOM/时间精度/步数排行实现/故障复盘
  • 第七章:AI进阶之------输入与输出函数(二)
  • html列表总结补充
  • 系统软中间件:连接软件与硬件的桥梁
  • 关于Bug排查日记的技术文章大纲
  • 【Ambari监控】— API请求逻辑梳理
  • Deepseek构建本地知识库
  • DAY 29 复习日:类的装饰器-2025.9.16
  • 2025.9.14英语红宝书【必背16-20】
  • 【CMake】环境变量
  • 贪心算法应用:广告投放优化问题详解