or等价改写union SQL案例
同事找我优化一些SQL,其中有个SQL比较经典,拿出来分享给大家,从原来执行2分钟,到1.4S出结果。
-- 原SQL
SELECT
count (*)
FROM (
SELECT
DISTINCT T1.id,
T1.doc_no,
T1.title,
T1.type,
T1.addTime,
T1.urgency,
T1.addUser,
T1.fileNo,
T1.fileNoID,
T1.orgId,
T1.deptId,
T1.fromDept,
T1.docType,
T1.docTypeID,
T1.isOld,
T1.publicState,
T1.oaPublicState,
P.state AS activeState,
P.cate_id AS cateID,
P.id AS procInsID
FROM
A T1,
B P
WHERE
T1.id = P.case_id
AND T1.addTime >= '2021-11-17 00:00:00'
AND T1.addTime <= '2022-11-17 23:59:59'
AND T1.type IN ('receive', 'dispatch', 'draft')
AND (T1.oapublicstate = '1'
OR EXISTS (
SELECT
P.case_id AS wf_case_id
FROM
wf_proc_ins_handlers H
WHERE
P.id = H.proc_ins_id
AND H.handler_id = '704fa12e-0166-1000-e000-05a00a010169'))) x;

这个节点循环了 47108 次,这个节点所需要的时间计算为 47108 * 2.695 = 126,956.06ms ,2分钟,影响了整条SQL的执行时间。
对应的SQL语句是这段

这种语句使用OR 加任何索引都不好使,想要优化只能改写改SQL。
-- 改写SQL优化 with x as (
SELECT
DISTINCT T1.id,
T1.doc_no,
T1.title,
T1.type,
T1.addTime,
T1.urgency,
T1.addUser,
T1.fileNo,
T1.fileNoID,
T1.orgId,
T1.deptId,
T1.fromDept,
T1.docType,
T1.docTypeID,
T1.isOld,
T1.publicState,
T1.oaPublicState,
P.state AS activeState,
P.cate_id AS cateID,
P.id AS procInsID
FROM
A T1,
B P
WHERE
T1.id = P.case_id
AND T1.addTime >= '2021-11-17 00:00:00'
AND T1.addTime <= '2022-11-17 23:59:59'
AND T1.type IN ('receive', 'dispatch', 'draft') )
select count(*) from (
select x1.* from x x1 where x1.oapublicstate = '1'
union
select x2.* from x x2 left join wf_proc_ins_handlers h on x2.procInsID = h.proc_ins_id where h.handler_id = '704fa12e-0166-1000-e000-05a00a010169' and h.proc_ins_id is not null
);
SQL 执行计划

修改之后只需要1.4S 就能出结果,两条语句比较 count(*) 结果集等价。
or等价改写union SQL案例的更多相关文章
- 《Oracle查询优化改写技巧与案例》学习笔记-------使用数字篇
一个系列的读书笔记,读的书是有教无类和落落两位老师编写的<Oracle查询优化改写技巧与案例>. 用这个系列的读书笔记来督促自己学习Oracle,同时,对于其中一些内容,希望大家看到以后, ...
- 《 Oracle查询优化改写 技巧与案例 》电子工业出版社
第1章单表查询 11.1 查询表中所有的行与列 11.2 从表中检索部分行 21.3 查找空值 31.4 将空值转换为实际值 41.5 查找满足多个条件的行 51.6 从表中检索部分列 61.7 为列 ...
- 利用Merge into 改写Update SQL 一例
前言 客户说,生产系统最近CPU使用率经常达到100%,请DBA帮忙调查一下. 根据客户提供的情况描述及对应时间段,我导出AWR,发现如下问题: 11v41vaj06pjd :每次执行消耗2,378, ...
- OR 改写union数据变少
<pre name="code" class="sql">SQL> SELECT deptno FROM emp WHERE mgr = 76 ...
- dense_rank()+hash提示改写优化SQL
数据库环境:SQL SERVER 2005 今天看到一条SQL,返回10条数据,执行了50多S.刚好有空,就对它进行了优化,优化后1S出结果. 先看下原始SQL SELECT t1.line_no , ...
- 性能测试四十二:sql案例之联合索引最左前缀
联合索引:一个索引同时作用于多个字段 联合索引的最左前缀: A.B.C3个字段--联合索引 这个时候,可以使用的查询条件有:A.A+B.A+C.A+B+C,唯独不能使用B+C,即最左侧那个字段必须匹配 ...
- 性能测试四十一:sql案例之慢sql配置、执行计划和索引
MYSQL 慢查询使用方法MYSQL慢查询介绍分析MySQL语句查询性能的问题时候,可以在MySQL记录中查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”.MYSQL自带的慢查 ...
- pl/sql案例
项目生命周期: 瀑布模型 拿到一个项目后,首先:分析需要用到的SQL语句: 其次:分析需要定义的变量初始值是多少,怎么得到最终值: 案例一: 统计每年入职的员工数量以及总数量: SQL语句:selec ...
- 实际SQL案例解决方法整理_LEAD函数相关
表结构及数据如下: 需求: 将记录按照时间顺序排列,每三条记录为一组,若第二条记录与第一条记录相差5分钟,则删除该记录,若第三条与第二条记录相差5分钟,则删除该记录, 第二组同理,遍历全表,按要求删除 ...
- Hive手写SQL案例
1-请详细描述将一个有结构的文本文件student.txt导入到一个hive表中的步骤,及其关键字 假设student.txt 有以下几列:id,name,gender三列 1-创建数据库 creat ...
随机推荐
- 反汇编分析C语言
环境 VC6.0环境 空函数反汇编 #include "stdafx.h" void function(){ } int main(int argc, char* argv[]) ...
- Anaconda 使用时,conda activate 失败
今天使用一台电脑上新安装的 anaconda 时,运行 conda activate, 出现如下报错: 错误提示中,说要把 . C:\ProgramData\Anaconda3\etc\profile ...
- 聊聊自然语言处理NLP
概述 自然语言处理(NLP)的正式定义:是一个使用计算机科学.人工智能(AI)和形式语言学概念来分析自然语言的研究领域.不太正式的定义表明:它是一组工具,用于从自然语言源(如web页面和文本文档)获取 ...
- 传输层之UDP与TCP的首部
从通信信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能的最底层. 传输层位于应用层和数据链路层之间,主要有两个协议,用户数据报协议UDP(User D ...
- Ceres简单应用-求解(Powell's Function)鲍威尔函数最小值
Ceres 求解 Powell's function 的最小化 \(\quad\)现在考虑一个稍微复杂一点的例子-鲍威尔函数的最小化. \(\quad{}\) \(x=[x_1,x_2,x_3,x_4 ...
- redis集群:MASTER aborted replication with an error: NOAUTH Authentication required.
发现个问题:redis集群所在服务器,磁盘空间很快就被占满,使用 "du -sh *"查看每个文件夹的大小,发现redis集群三个从节点的日志文件占用空间很大. 下面记录问题排查及 ...
- 一张图读懂TuGraph Analytics开源技术架构
TuGraph Analytics(内部项目名GeaFlow)是蚂蚁集团开源的分布式实时图计算引擎,即流式图计算.通过SQL+GQL融合分析语言对表模型和图模型进行统一处理,实现了流.批.图一体化计算 ...
- SpringBoot 笔记
SpringBoot 笔记 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 2014,martin fowler 微服务:架构风格(服务微化) 一个应用应该是一组小型服 ...
- 四层负载均衡的NAT模型与DR模型推导
导读 本文首先讲述四层负载均衡技术的特点,然后通过提问的方式推导出四层负载均衡器的NAT模型和DR模型的工作原理.通过本文可以了解到四层负载均衡的技术特点.NAT模型和DR模型的工作原理.以及NAT模 ...
- CodeForces 1367E Necklace Assembly
题意 给定一个字符串\(s\),长度为\(n\),一根项链为一个环,定义一根项链为\(k-beautiful\),则该项链顺时针转\(k\)下后与原项链相等,给出\(k\),请构造一根最长的\(k-b ...