记录一次Sql性能优化

news2025/2/24 9:18:37

场景:

主业务表 contract(合同表),对于不同主体(人员),能查看的合同是不一样的。系统企业业务用到了,系统资源表 PERMISSION_RESOURCE 、员工对于资源关系表:ENTRY_JOIN

正常情况下。查询个人能看的合同。sql如下:简化版、且 对应索引都已加
 

SELECT
	COUNT( DISTINCT C.id ) 
FROM
	CONTRACT C
	INNER JOIN PERMISSION_RESOURCE PR ON PR.resourceId = C.id
	INNER JOIN ENTRY_JOIN EJ ON PR.entryId = EJ.entryId 
	AND EJ.joinId = 2931819442069999624 
	AND PR.canview = 1 
WHERE
	C.STATUS != 'DELETE' 

根据,sql优化建议,内联性能更好。对于业务说contract 往往历史合同查看/

第一次优化,通过id 约定查询范围(id 是 根据时间戳 偏移得到)

SELECT
	COUNT( DISTINCT C.id ) 
FROM
	CONTRACT C
	INNER JOIN PERMISSION_RESOURCE PR ON PR.resourceId = C.id
	INNER JOIN ENTRY_JOIN EJ ON PR.entryId = EJ.entryId 
	AND EJ.joinId = 2931819442069999624 
	AND PR.canview = 1 
WHERE
	C.STATUS != 'DELETE' 
	AND C.id > 3016248654885646520 
	AND C.id < 3036245744471820304

结果:查询的效果非常低。达到 4.283 秒

 

通过解释sql 可以看到 对于 PERMISSION_RESOURCE 查询 使用了 where 。这步没有问题。

问题在于 contract 是资源主体。 PERMISSION_RESOURCE 是资源表。

contract 是小表(9k条),PERMISSION_RESOURCE 是大表(58w)

小对多  内联是 比较耗费性能的

因此 改成 匹配子查询

SELECT
	COUNT( DISTINCT C.id ) 
FROM
	CONTRACT C 
WHERE
	C.STATUS != 'DELETE' 
	AND C.id > 3016248654885646520 
	AND C.id < 3036245744471820304 
	AND EXISTS (
	SELECT
		1 
	FROM
		PERMISSION_RESOURCE PR
		INNER JOIN ENTRY_JOIN EJ ON PR.entryId = EJ.entryId 
	WHERE
		PR.resourceId = C.id 
		AND EJ.joinId = 2931819442069999624 
	AND PR.canview = 1 
	)

修改后 新能飙升了 。 

 总结:

对sql性能优化时,不能照搬书上知识或者网络文章。还是需要有扎实的技术对实际情况进行分析。

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

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

相关文章

物联卡批发为什么那么火爆?

2022年物联网行业开始爆发&#xff0c;针对于企业设备联网的物联卡就显得格外重要了&#xff0c;而共享单车&#xff0c;移动支付&#xff0c;智慧城市&#xff0c;自动售卖机等企业采购物联卡会面临着各种问题&#xff0c;低价陷阱&#xff0c;流量虚假&#xff0c;管理混乱&a…

[Python图像处理] 合成微缩效果

合成微缩效果前言图像微缩效果原理实现图像微缩效果相关链接前言 图像中的模糊效果可以强烈影响被拍摄场景的感知&#xff0c;模糊在传达所需的尺寸和距离感方面起着重要作用。合成微缩 (miniature faking) 是一个使真实大小物体照片看起来像微缩模型照片的过程&#xff0c;也…

java必背综合知识点总结

一、JDK常用的包 java.lang&#xff1a; 这个是系统的基础类&#xff0c;比如String、Math、Integer、System和Thread&#xff0c;提供常用功能。 java.io: 这里面是所有输入输出有关的类&#xff0c;比如文件操作等 java.net: 这里面是与网络有关的类&#xff0c;比如URL,U…

寻找适配网红很迷茫?最全秘笈来了

根据《2022年全球数字概览》报告显示&#xff0c;全球社交媒体用户超过46.2亿&#xff0c;相当于全球总人口的58.4%。全球用户每天在社交媒体上平均花费近2.5个小时&#xff0c;并且每天以2分钟的速度增长。 社交媒体成为全球网民生活中不可或缺的一部分&#xff0c;而对于跨境…

【深度学习】Yolov5训练意外中断后如何接续训练详解;yolov5中断后继续训练

0. 前言 目标检测是计算机视觉上的一个重要任务,下面这篇文章主要给大家介绍了关于Yolov5训练意外中断后如何接续训练的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下 1. 配置环境 操作系统&#xff1a;Ubuntu20.04 CUDA版本&#xff1a;11.4 Pytorch版本…

Excel - 数据分析师所需的最常用公式。

“先打好基础,再细化细节——克里斯安德森” 这将是我正在撰写的关于必须具备数据分析技能的第 4 个也是最后一个“像你 5 岁一样解释”系列。(请观看其他的——Power BI、Python 和 SQL)。现在,我们将具备所需的所有基本技能,然后可以进入数据分析领域的下一阶段 使用 E…

Java实现大乐透不重复数字随机号码生成方案

大乐透攻略Java实现&#xff08;仅供参考学习&#xff09; 购票方式 每期最低购票数&#xff1a;7 张 最低消费&#xff1a;14 元 方案介绍&#xff1a;后区12个数中随机分成6组&#xff0c;且数字不重复。前区35个数随机分成7组&#xff0c;且数字不重复。前区需要7组才能够…

【目标检测】IoU、GIoU、DIoU、CIoU、EIoU 5大评价指标

目录 一、简介 二、IoU&#xff08;Intersection over Union&#xff09; 三、GIoU&#xff08;Generalized IoU&#xff09; 四、DIoU&#xff08;Distance-IoU&#xff09; 五、CIoU(Complete-IoU) 六、EIoU(Efficient-IoU) 七、pytorch代码实现 七、总结 一、简介 在目标检测…

即时通讯开发之如何测试实时语音通话质量

实时语音聊天开发&#xff0c;对于一般的开发者来说比较神秘&#xff0c;很多朋友不太清楚如何全面的评估一个音频引擎。很多朋友还停留在这样的初级阶段&#xff1a;把demo调通&#xff0c;找几个人喂喂喂......凭自己优异的听觉感受一下&#xff0c;整个测试过程就完成了。 但…

【嵌入式硬件芯片开发笔记】EEPROM芯片M24C32配置流程

【嵌入式硬件芯片开发笔记】EEPROM芯片M24C32配置流程 32-Kbit serial IC bus EEPROM - 105C operation 适用于M24C32/M24C32-DRE 读取存储的从机地址为&#xff1a;0x50 读取标识页面的从机地址为&#xff1a;0x58 WC引脚接地&#xff0c;存储可以进行写操作 地址长度为16位 存…

117. 填充每个节点的下一个右侧节点指针 II

文章目录1. 背2. 题目3. 答案1. 背 这道题本来可以很简答&#xff0c;一个队列&#xff0c;存储指针和它的行数就OK了&#xff0c;但是这道题的难点在于不用额外空间复杂度。 横向看一下&#xff0c;这一行是不是就是一个链表呢&#xff1f; 多加一个变量&#xff0c;用来存储第…

C++入门教程||C++ 判断||C++ 日期 时间

判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 下面是大多数编程语言中典型的判断结构的一般形式&#xff1a; 判断语句 C 编程语言提…

three.js实战 -自定义剪切器

1. 前言 这是我在github上看到大佬的一个作品&#xff0c;当时感觉很有意思&#xff0c;决定分享出来&#xff0c;不知道取这个名字是否正确&#xff0c;废话不多说看下面效果。 2.demo效果 3.需要掌握的知识 矩阵的基本运算&#xff0c;能够认是到一些基本变换用到的矩阵(…

晶圆级倒装装备及控制系统

晶圆级倒装装备主要由晶圆盘进料模块、晶圆盘工作台模块、覆晶模块、焊头模块、基板工作台模块、点胶模块、视觉模块和基板进出料模块组成&#xff0c;如图 2-2 所示。 晶圆级倒装装备控制系统结构晶圆级倒装装备的运控系统主要由工控机、运动控制卡、驱动器、反馈装置和直线电…

QA:observable and Subject

概念区别和常见的错误理解辩证&#xff1a; 通俗理解一下 1. Observable 是一条 "水管蓝图" ,每次打开水龙头&#xff0c;水流会按照设计好的路线流向终点。起点和终点一一对应。每次打开水流&#xff0c;都是新的流&#xff0c;水流之间互不影响。一次一管。 2. …

VMWare虚拟机设置CentOS7共享文件夹

1. 目录 系统版本&#xff1a;CentOS 7.9 文章目录1. 目录2. VMWare&#xff1a;虚拟机设置&#xff0c;设置共享文件夹3. 虚拟机设置&#xff1a;手动挂载共享文件夹4. 检查是否挂载成功5. (可选)创建共享文件夹的软链接(快捷方式)6. (可选)定时任务开机自动挂载2. VMWare&am…

博客文章分类导引(持续更新)

摘要&#xff1a;本文提供一篇博客目录&#xff0c;有物联网、安卓编程、硬件设计等若干主题&#xff0c;这些主题一般都是成系统的&#xff0c;可以实现从零开始做出自己的物联网系统。 文章结构如下&#xff1a; 1.物联网专栏 使用arduino编写mqtt客户端连接emqx服务器 VSC…

vue.js:组件化的实现和使用过程

什么是组件化&#xff1f; 当我们遇到复杂问题的时候&#xff1a; 任何一个人处理信息的逻辑能力都是有限的所以&#xff0c;当我们面对一个复杂的问题的时候&#xff0c;我们不可能一次性搞定处理掉一大堆内容但是我们都会有问题拆解的能力将一个复杂的问题拆解成很多小的问…

Springcloud笔记之Ribbon

Ribbon&#xff1a;负载均衡&#xff08;基于客户端&#xff09;1. 负载均衡以及Ribbon1.1 Ribbon 的概念1.2 Ribbon 的作用2. 集成Ribbon3. 使用Ribbon实现负载均衡3.1 步骤3.2 自定义规则1. 负载均衡以及Ribbon 1.1 Ribbon 的概念 Spring Cloud Ribbon 是基于Netflix Ribbo…

[附源码]计算机毕业设计JAVA智能超市导购系统

[附源码]计算机毕业设计JAVA智能超市导购系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…