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

news2024/9/25 3:27:59

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

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

        SQL大致是这样的:

    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' 
	  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.coloradmin.cn/o/430682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STL--string

一、string介绍 string是表示字符序列的对象。 标准字符串类通过类似于标准字节容器的接口为此类对象提供支持&#xff0c;但添加了专门设计用于处理单字节字符字符串的功能。 字符串类是 basic_string 类模板的实例化&#xff0c;该模板使用char作为其字符类型&#xff0c;以…

【云原生进阶之容器】第五章容器运行时5.7--容器逃逸原理

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

为什么要对员工行为进行安全管控?

ChatGPT的火热已不是一件新鲜事了。而现在更让大家热议的是&#xff0c;ChatGPT带来的网络安全风险&#xff0c;不少安全人员对此担心不已。因ChatGPT引起的网络安全事件&#xff0c;媒体也多有报道。 例如&#xff0c;近日&#xff0c;外媒就报道了三星因ChatGPT泄露了机密信息…

ChatGPT - 基于 Visual Studio Code 进行 AI 编码

2023-04-15 周六 杭州 晴 前情提要 ChatGPT &#xff0c;AutoGPT , AgentGPT 现在各种人工智能编码工具层出不穷&#xff0c;通过人工智能编码再也不用记大量的技术知识点了&#xff0c;现在所谓开发人员的经验性的东西也好像弱化了很多&#xff0c;我们可以更有效率的做自己…

Qt/QML编程学习之心得:QML界面设计(二)

都知道Qt是一种界面设计语言,那么它有几种设计方式UI technologies呢?答案是5种。 1、传统桌面所见即所得Classic desktop look-and-feel• Qt Widgets 2、 流畅、现代+触控Fluent, modern touch-based UX• Qt Quick 3、 三维3D becomes more and more important• Qt Open…

安全运营之资产安全信息管理

安全风险管理的三要素分别是资产、威胁和脆弱性&#xff0c;脆弱性的存在将会导致风险&#xff0c;而威胁主体利用脆弱性产生风险。网络攻击主要利用了系统的脆弱性。由于网络管理对象&#xff08;资产&#xff09;自身的脆弱性&#xff0c;使得威胁的发生成为可能&#xff0c;…

Linux 函数调用过程解析

一、Linux 函数调用过程解析 在x86的计算机系统中&#xff0c;内存空间中的栈主要用于保存函数的参数&#xff0c;返回值&#xff0c;返回地址&#xff0c;本地变量等。一切的函数调用都要将不同的数据、地址压入或者弹出栈。因此&#xff0c;为了更好地理解函数的调用&#xf…

QT 常见面试题

1、在Qt当中&#xff0c;多线程环境下&#xff0c;信号槽分别是在什么样的线程中执行&#xff1f;如何控制&#xff1f; 参考答案&#xff1a; 通过connect(...)第5个参数控制信号槽执行所在线程 connect(...)它的连接方式&#xff1a;队列连接、自动连接和直接连接 队列连…

EMC-MLCC电容反谐振点引起的RE辐射超标

MLCC电容反谐振点引起的RE辐射超标 对待RE辐射问题&#xff0c;可以按照干扰源&#xff0c;干扰路径&#xff0c;被干扰源&#xff0c;入手较多的是干扰源和干扰路径&#xff0c; 解决干扰源可以从展频&#xff0c;调频&#xff0c;屏蔽干扰源&#xff0c;增加RC snabber吸收…

ChatGPT颠覆者来了,能替代90%的人的工作?

前言 Auto GPT是一个实验性开源应用程序&#xff0c;展示了GPT-4语言模型的功能。该程序由GPT-4驱动&#xff0c;将LLM“思想”链接在一起&#xff0c;以自主实现您设定的任何目标。作为GPT-4完全自主运行的首批例子之一&#xff0c;Auto GPT突破了人工智能的极限。 特征 &a…

明面抵制,暗中布局 对于AI,马斯克的言行为何如此“割裂”?

最近&#xff0c;马斯克创建了一家叫做“X”的空壳公司&#xff0c;目标是将其打造成涵盖各方面的多功能应用集合平台&#xff0c;推特、SpaceX、特斯拉、Neuralink等公司业务都已打包加入其中。如今&#xff0c;“X”公司再添新丁——X.AI&#xff0c;即马斯克新成立的人工智能…

【硬件外设使用】——PWM

【硬件外设使用】——PWMPWM基本概念PWM使用方法pyb.pwm方法属性machine.pwm方法属性PWM可用的传感器PWM基本概念 PWM是脉冲宽度调制&#xff08;Pulse Width Modulation&#xff09;的缩写&#xff0c;是一种用数字信号控制模拟电路输出的技术。PWM通常被用来控制电压或电流的…

【 Spring MVC 核心功能(三) - 输出数据】

文章目录引言一、返回静态页面二、返回非静态页面的数据三、返回 JSON 对象四、请求转发(forward)和请求重定向(redirect)五、拓展&#xff1a;IDEA 热部署(热加载)3.1 添加 SpringBoot DevTools 框架3.2 开起 IDEA 的自动编译3.3 开起运行中的热部署3.4 使用 debug 启动项目引…

Docker系列 基于OpenAI API自建ChatGPT

转自我的博客文章https://blognas.hwb0307.com/linux/docker/4201&#xff0c;内容更新仅在个人博客可见。欢迎关注&#xff01; 前言 我用帐号/密码使用chatGPT已经有一段时间。但是&#xff0c;我有几个私交较密的朋友&#xff0c;他们并不具备使用chatGPT的条件&#xff1b…

kafka集群topic重新分配leader

1.案例 当kafka集群的broker节点宕机重启后,此broker节点的partition分区的leader节点会被选举为其它broker节点,此broker节点恢复后就会导致配分不均衡 可以看到所有partition的leader节点都在broker id为1的节点上,原来是平均分配到3个broker节点上,replicas项的首位…

【动手学深度学习】(task123)注意力机制剖析

note 将注意力汇聚的输出计算可以作为值的加权平均&#xff0c;选择不同的注意力评分函数会带来不同的注意力汇聚操作。当查询和键是不同长度的矢量时&#xff0c;可以使用可加性注意力评分函数。当它们的长度相同时&#xff0c;使用缩放的“点&#xff0d;积”注意力评分函数…

文章改写工具-文章改写工具的原理

文章改写工具的原理 文章改写工具是一种利用自然语言处理技术和相关算法&#xff0c;对原始文章进行改写、调整或替换等操作&#xff0c;生成与原始文章类似但又不完全相同的新文章的工具。 实现文章改写的工具通常需要包括以下几个步骤&#xff1a; 文本预处理&#xff1a;对原…

【数据库数据恢复】MongoDB数据库启动失败的数据恢复案例

数据库数据恢复环境&#xff1a; Windows Server操作系统服务器&#xff0c;部署MongoDB数据库。 数据库故障&分析&#xff1a; 在MongoDB数据库服务未关闭的情况下&#xff0c;管理员将MongoDB数据库文件从原分区拷贝到其他分区&#xff0c;然后将MongoDB数据库所在原分区…

网页解析--接上篇--bs4/xpath

网页解析完成的是从下载回来的html文件中提取所需数据的方法&#xff0c;一般会用到的方法有: 正则表达式&#xff1a;将整个网页文档当成一个字符串用模糊匹配的方式来提取出有价值的数据 Beautidul Soup&#xff1a;一个强大的第三方插件 lxml&#xff1a;解析html网页或者xm…

一文详解 PoseiSwap,Nautilus Chain 上的首个 DEX

前不久&#xff0c;首个 Layer3 概念的新链 Nautilus Chain 推出了测试网“Triton” 引发瞩目&#xff0c;据了解过&#xff0c;经过一个月的Triton I测试历程&#xff0c;Nautilus Chain社区成员突破200,000&#xff0c;同时测试网激励活动注册地址数突破180,000&#xff0c;链…