sql查询优化实际案例

1、第一步:sql优化

正对于海量数据的查询优化,且外键关联比较多的情况,通常情况是下sql层面的优化,有些时候是由于sql不合理的编写导致,如尽量少使用sql内查询等

如:避免使用 left join  (select * form table) a 等查询,一般这种都可以在sql 层面进行优化操作

2、第二步:创建索引

创建索引首当注意的是要匹配最佳左前缀法则,避免创建的索引失效,其实使用EXPLAIN关键字最索引进行分析,查看命中情况,然后适当调整索引的命中策略

3、第三步:通过前面两种还是未能显著提高效率,可分两次查询,减少索引的回表次数

如:第一次通过复杂的操作只差数据的主键ID,第二次直接通过主键ID的集合去查找完整的数据记录,即可获得不错的效果提升

        实操案例:

        第一次查询:

SELECTa.id,
FROMLEFT JOIN device_info b on a.terminal_id = b.idLEFT JOIN car_info c ON c.id = b.caridLEFT JOIN device_alarm_settings d on d.alarmnumber = a.alarm_numberLEFT JOIN sys_auth_dept f on f.deptid = b.deptid and f.is_delete = 0
WHEREa.start_time >= '2023-11-23 00:00:00' AND a.start_time <= '2023-11-25 10:55:38' AND f.deptidnew LIKE CONCAT( '001', '%' ) 
GROUP BYa.id 
ORDER BYa.start_time DESC LIMIT 50,10

        第二次查询只需要通过第一次的ID集合查询,即可获得数据,且全部命中索引:

SELECTa.id,a.is_handle AS isHandle,m.driver_code AS driverCode,m.drivername,c.carnumber,d.minclass_name AS minclassName,d.confirm,a.start_time AS startTime,a.end_time AS endTime,a.alarm_info AS alarmInfo,a.start_location AS startLocation,b.carid,a.end_location AS endLocation,a.handle_content AS handleContent,e.loginname,a.handle_time AS handleTime,a.end_lon AS endLon,a.end_lat AS endLat,a.start_lon AS startLon,a.start_lat AS startLat,b.terminal,a.alarm_number AS alarmNumber,f.deptname AS deptname,b.channeltotals,a.alarm_duration alarmDuration,mrm.rule_name AS ruleName,v.logic_channel AS videoChannel,v.url AS videoUrl,p.channelid AS photoChannel,p.multimediapath AS photoUrl,att.file_path,att.file_typeFROMdevice_alarm aLEFT JOIN device_info b ON a.terminal_id = b.idLEFT JOIN car_info c ON c.id = b.caridLEFT JOIN device_alarm_settings d ON d.alarmnumber = a.alarm_numberLEFT JOIN sys_auth_user e ON a.handle_by = e.useridLEFT JOIN car_driver_link cdl ON c.id = cdl.caridLEFT JOIN car_driver_info m ON m.id = cdl.driveridLEFT JOIN device_video_file_record v ON v.alarm_id = a.idLEFT JOIN device_media_info p ON a.id = p.alarmidLEFT JOIN monitor_rule_maintain mrm ON mrm.id = a.rule_idLEFT JOIN device_safety_alarm sda ON sda.device_alarm_id = a.idLEFT JOIN device_safety_attachment att ON att.safety_alarm_id = sda.idJOIN sys_auth_dept f ON f.deptid = b.deptidAND f.is_delete = 0WHEREa.id in <foreach collection="idList" open="(" close=")" separator="," item="id">#{id}</foreach>

先后两次关联表相同,只有where条件不同,却能得出意想不到的效果,其中奥妙一言以概之:“通过减少回表次数,增加查找次数来提高整体数据的相应速度”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/217088.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法-----基数排序

目录 前言 基数排序 算法思想 ​编辑 算法示例 代码实现 1.队列queue.h 头文件 2.队列queue.c 源文件 3.主函数&#xff08;radix_sort实现&#xff09; 算法分析 前言 今天我想把前面未更新完的排序算法补充一下&#xff0c;也就是基数排序的一种&#xff0c;这是跟…

【数据库】数据库物理执行计划最基本操作-表扫描机制与可选路径,基于代价的评估模型以及模型参数的含义

物理执行计划基本操作符 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏…

css三角,鼠标样式,溢出文字

目录 css三角 鼠标样式 例子&#xff1a;页码模块 溢出文字表示方式 margin负值运用 css三角强化 css三角 css三角中&#xff1a;line-height&#xff1a;0和font-size&#xff1a;0是防止兼容性的问题 jd {position: relative;width: 120px;height: 249px;background-…

斐讯K2结合Padavan实现锐捷认证破解方法

前言 众所周知&#xff0c;校园网在传统模式下是不能直接插路由使用的&#xff0c;但苦于校园网只能连接一台设备的烦恼&#xff0c;不得不“另辟蹊径”来寻求新的解决路径&#xff0c;这不&#xff0c;它来了&#xff0c;它来了&#xff0c;它带着希望走来了。 本文基于斐讯…

电子学会C/C++编程等级考试2021年09月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:字符统计 给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。输入 输入包含一行,一个字符串,长度不超过1000。输出 输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多…

前缀和——238. 除自身以外数组的乘积

文章目录 &#x1f377;1. 题目&#x1f378;2. 算法原理&#x1f365;解法一&#xff1a;暴力求解&#x1f365;解法二&#xff1a;前缀和&#xff08;积&#xff09; &#x1f379;3. 代码实现 &#x1f377;1. 题目 题目链接&#xff1a;238. 除自身以外数组的乘积 - 力扣&a…

34970A 数据采集 / 数据记录仪开关单元

34970A 数据采集 / 数据记录仪开关单元 产品综述&#xff1a; Keysight 34970A 数据采集/数据记录仪开关单元由一个 3 插槽主机和一个内置的 6 1/2 位数字万用表组成。每个通道可以单独配置&#xff0c;以测量 11 种不同功能之一&#xff0c;这样既不会增加成本&#xff0c;也…

ubuntu挂载硬盘方法

1.关闭服务器加上新硬盘 2.启动服务器&#xff0c;以root用户登录 3.查看硬盘信息 fdisk -l4.格式化分区 找到需要分区的目录,并记录分区的uuid&#xff0c;用于后面修改/etc/fstab永久挂载配置文件 mkfs.ext4 /dev/nvme0n1 mkfs.ext4 /dev/nvme1n1 Filesystem UUID: a1c…

zookeeper 单机伪集群搭建简单记录

1、官方下载加压后&#xff0c;根目录下新建data和log目录&#xff0c;然后分别拷贝两份&#xff0c;分别放到D盘&#xff0c;E盘&#xff0c;F盘 2、data目录下面新建myid文件&#xff0c;文件内容分别为1&#xff0c;2&#xff0c;3.注意文件没有后缀&#xff0c;不能是txt文…

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-4:内核控制与时间管理函数)

学习之路主要为FreeRTOS操作系统在STM32F103&#xff08;STM32F103C8T6&#xff09;上的运用&#xff0c;采用的是标准库编程的方式&#xff0c;使用的IDE为KEIL5。 注意&#xff01;&#xff01;&#xff01;本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

怎样禁止邮件发送涉密信息

数字化时代&#xff0c;电子邮件已成为人们生活和工作中不可或缺的通讯工具。然而&#xff0c;随着互联网的普及&#xff0c;涉密信息的泄露风险也随之增加。为了保护敏感数据&#xff0c;禁止邮件发送涉密信息显得尤为重要。以下是一些建议&#xff0c;帮助你实现这一目标。 1…

「最优化基础知识2」一维搜索,以及python代码

最优化基础知识&#xff08;2&#xff09; 无约束优化问题&#xff0c;一维搜索 一、一维搜索 一维搜索的意思是在一个方向上找到最小点。 用数学语言描述&#xff0c;X*Xk tPk&#xff0c;从Xk沿着Pk方向行走t到达最小点X*。 1、收敛速度&#xff1a; 线性收敛&#xff1…