MySQL调优笔记——慢SQL优化记录(2)

news/2024/4/24 23:11:25/

        今天调优的原因是,有一个统计报表业务,查询的时间太慢;同时由于数据库的压力是随机性的,这个业务的执行下限和上限相差近20倍;快的时候可以达到600ms,慢的时候有9秒之多;

        接下来详细介绍:这是一个报表业务,按照设备ID统计设备在一段时间内的异常(业务逻辑判断)订单总数;他的数据生成是定时任务每小时查询订单表,并按照一定的业务逻辑判断为异常订单统计单个设备在这段时间范围内异常订单总数的;

        SQL大致是这样的:

    SELECT t1.gun_id,sum(total_count) total_countFROM order_exception t1 where is_deleted = 0 and start_date > '2023-04-01 00:00:00' and start_date < '2023-04-07 23:59:59' group by gun_id order by concat(pile_sn,gun_id) asc

        我们的前端报表是每页10行,分页查询;

        这里就出现了第一个优化点,由于我们使用的是mybatis-plus框架,在使用自动分页功能查询数据的时候,他会自动在外面套上查询总数的语句,以计算出一共有多少页;

        像这样:

SELECT COUNT(1) NUM from (你的业务SQL) 

        这样做的话,会导致这个统计语句被执行两次,在数据量大的情况下就很慢;

        我们初步优化一下,由于每页仅可查看10条数据,但是这个聚合的汇总统计语句计算出的是该段时间内所有设备的总异常订单数量,因此我们需要缩小查询的范围:

        1. 使用DISTINCT语句,计算出该统计表中符合查询条件的设备ID,因为在这个业务中每个设备就是一行数据,所以这里查询到的设备数就是该业务报表的总行数;和原SQL的分页逻辑一致;

        2. 在经过一个查询设备ID的分页SQL之后,可以得到需要在该页展示的设备ID,因此使用IN语句去查询这些设备的异常订单数,查询的范围就大大降低了,效率提升明显,不过这里一定别忘了加上设备id的这个索引;修改之后像下面这样子:

SELECT t1.gun_id,sum(total_count) total_count
FROM order_exception t1 where is_deleted = 0 and start_date > '2023-04-01 00:00:00' and start_date < '2023-04-07 23:59:59' and gun_id in 
(
1367069347104690178,
1367069418131034114,
1367069451580608514,
1368462285101600770,
1368462416299429889,
1368462497148833794
)

        这样修改后,查询时间从5秒降低到了0.5秒,这其中还包括查询结果传输到客户端的时间;

修改前后的EXPLAIN执行计划对比:

 很明显扫描的行数rows字段变少了很多;

        最后,由于该表的数据量总是会随着业务量的增长和时间的推移积累越来越多,于是我找产品经理商量了一下,确认了不需要小时频率更新的需求,于是就就将定时任务的执行频率改为每日执行一次;

        经过上面两个步骤的操作之后,SQL的查询范围大大减少,然后该表的数据量也是减少了很多,这样整体的报表业务查询速度就提高了很多;这次的优化主要是两个方面,SQL逻辑的优化和业务逻辑的优化,其实第一点还是相对容易想到的,但是第二点一般的开发同学估计不会去主动沟通,简单记录一下


http://www.ppmy.cn/news/47954.html

相关文章

SOFA Weekly|SOFARPC 5.10.0 版本发布、SOFA 五周年回顾、Layotto 社区会议回顾与预告...

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

水电设计院信息管理系统1.0

水电设计公司信息管理系统软件使用说明书 代码太多就不贴了&#xff0c;请在我的资源里下载&#xff0c;已部署在企业进行试运行。https://download.csdn.net/download/weixin_44735475/87704302 目录 1.引言 1 2.项目背景 1 3.系统功能 2 3.1系统功能 2 3.2系统性能 2 3.3系…

精通 TensorFlow 2.x 计算机视觉:第二部分

原文&#xff1a;Mastering Computer Vision with TensorFlow 2.x 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;…

【洛谷】P1631 序列合并

【洛谷】 P1631 序列合并 题目描述 有两个长度为 N N N 的单调不降序列 A , B A,B A,B&#xff0c;在 A , B A,B A,B 中各取一个数相加可以得到 N 2 N^2 N2 个和&#xff0c;求这 N 2 N^2 N2 个和中最小的 N N N 个。 输入格式 第一行一个正整数 N N N&#xff1b; 第二…

湫湫系列故事——减肥记Ⅰ

文章目录 湫湫系列故事——减肥记Ⅰ程序设计程序分析湫湫系列故事——减肥记Ⅰ 【问题描述】 对于吃货来说,过年最幸福的事就是吃了,没有之一! 但是对于女生来说,卡路里(热量)是天敌啊! 资深美女湫湫深谙“胖来如山倒,胖去如抽丝”的道理,所以她希望你能帮忙制定一个食…

Omniverse Replicator的“Hello World”

核心功能——Replicator的“Hello World” 学习目标 本教程的目的是介绍基本的 Omniverse Replicator 功能&#xff0c;例如使用一些预定义的 3D 资产创建一个简单的场景&#xff0c;应用随机化&#xff0c;然后将生成的图像写入磁盘以进行进一步处理。 使用复制器 API 要运…

淌入客户市场的“深水区”,锐捷云桌面体验再升级

作者 | 曾响铃 文 | 响铃说 现阶段&#xff0c;云桌面的普惠价值随着行业应用的深化正在不断突显。 以教育为例&#xff0c;教育信息化建设已经跨过了从无到有的阶段&#xff0c;目前正面临着如何降本增效的问题。云桌面的应用&#xff0c;正在有效地解决这个问题。 在响铃…

Java中的null总结

日常工作&#xff0c;遇见几次null的语法报错&#xff0c;整理以下Java中null&#xff1a; &#x1f341; null是一个关键字&#xff0c;对大小写敏感&#xff0c;像public、static… &#x1f341; null是所有引用数据类型的默认值&#xff08;int默认0、boolean默认false…)…

智能面板小程序如何实现跨端开发,并无缝引入ChatGPT?

如何让开发者更便捷高效地开发面板小程序&#xff1f; 全球化 IoT 开发平台服务商涂鸦智能&#xff08;NYSE&#xff1a;TUYA&#xff0c;HKEX&#xff1a;2391&#xff09;原先提供的是一套基于 React Native (简称 RN) 的面板 SDK&#xff0c;但是随着面板规模的不断增长&am…

工程项目管理系统源码+spring cloud 系统管理+java 系统设置+二次开发

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

采购系统是如何管理供应商的?

随着数字化的推进&#xff0c;企业面临着越来越多的供应商管理问题。企业采购数字化转型已经成为大势所趋&#xff0c;对于采购数字化转型而言&#xff0c;供应商管理是重要一环。 供应商准入管理 在供应商准入阶段&#xff0c;企业需要从供应商资质、财务能力、信誉能力、管理…

redis笔记——springboot集成redis

Sprigboot整合 springboot整合数据操作一般会通过官方的一个项目springdata来进行整合&#xff0c;它可以操作很多市面上流行的数据库&#xff0c;并且为java程序提供一套完整的统一的api调用。在springboot2版本之后&#xff0c;原本的jedis被替换成功了lettuce。原因是 jed…

Java读取文件方式

IO流读取 文本内容 按行读取文件内容 指定编码格式&#xff08;推荐&#xff09; public static void main(String[] args) throws UnsupportedEncodingException {read("D:\\test.txt");}public static void read(String path) {BufferedReader reader null;try …

DNS服务器 - 理论

DNS服务器 1. 概念2. DNS域名结构3. 域名的分级4. 域名服务器4.1 层次结构4.2 DNS服务类型 5. 域名解析过程5.1 递归查询与迭代查询5.2 解析流程1. 迭代查询2. 递归查询 6. 高速缓存7. 加上主机缓存后的DNS解析流程8. 常见的域名解析记录9. DNS正向解析和反向解析10. 配置文件介…

Ubuntu上跑通PaddleOCR

书接上文。刚才说到我已经在NUC8里灌上了Windows Server 2019。接下来也顺利的启用了Hyper-V角色并装好了一台Ubuntu 22.04 LTS 的虚机。由于自从上回在树莓派上跑通了Paddle-Lite-Demo之后想再研究一下PaddleOCR但进展不顺&#xff0c;因此决定先不折腾了&#xff0c;还是从x6…

vs = VirtualService

VirtualService 您是正确的。我混淆了Kubernetes中的资源类型。"vs"是Istio服务网格中的资源类型&#xff0c;代表Virtual Service&#xff08;虚拟服务&#xff09;。 Virtual Service是Istio中的一种路由规则&#xff0c;它定义了如何将请求路由到服务的不同版本…

2023年 中国制造业这三大趋势不可忽视

政府要掏1个亿奖励制造企业搞发展&#xff0c;我国制造业大翻身的时代来了吗&#xff1f; 4月12日成都日报电&#xff0c;为支持制造业创新发展&#xff0c;支持制造业数字化、智能化和绿色化转型升级&#xff0c;培育高精尖特企业&#xff0c;政府给扶持政策不说&#xff0c;…

如何快速查找下载外文文献,哪个文献下载网站好用

​​如何高效获取到自己需要的外文文献&#xff0c;最好的办法就是去文献来源数据库中查找&#xff0c;你需要的文献来源数据库有可能是Elsevier&#xff08;sciencedirect&#xff09;、也可能是Wiley Online Library、也有可能是IEEE等等&#xff0c;外文数据库机构太多了。这…

C语言入门篇——数据篇

目录 1、变量与常量 1.1变量 1.2常量 1.2.1#define 定义的标识符常量 1.2.2枚举常量 2、数据类型关键字 3、整数 4、浮点数 5、基本数据类型 5.1、int型数据 5.2、char型数据 5.3、_Bool类型 5.4、float、double和long double 5.5、复数和虚数类型 6、总结 1、变…

Springboot基础学习之(二十三):实现定时任务

定时任务&#xff1a;在开发过程中是经常能够使用到的&#xff1a;定时发布邮件等等 先了解一下什么时cron表达式&#xff1f; 它是定义执行任务时间的一种时间表达式&#xff0c;使用方法 Scheduled(cron "0/2 * * * * ? ")&#xff0c;这里代码的含义是每两秒执行…