MySQL中对于not in和minus使用的优化
作者:罗龙九 发布时间:2024-01-17 04:17:20
标签:MySQL
优化前:
select count(t.id)
from test t
where t.status = 1
and t.id not in (select distinct a.app_id
from test2 a
where a.type = 1
and a.rule_id in (152, 153, 154))
17:20:57 laojiu>@plan
PLAN_TABLE_OUTPUT
————————————————————————————————————————-
Plan hash value: 684502086
—————————————————————————————-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
—————————————————————————————-
| 0 | SELECT STATEMENT | | 1 | 18 | 176K (2)| 00:35:23 |
| 1 | SORT AGGREGATE | | 1 | 18 | | |
|* 2 | FILTER | | | | | |
|* 3 | TABLE ACCESS FULL| test | 1141 | 20538 | 845 (2)| 00:00:11 |
|* 4 | TABLE ACCESS FULL| test2 | 1 | 12 | 309 (2)| 00:00:04 |
—————————————————————————————-
Predicate Information (identified by operation id):
—————————————————
2 – filter( NOT EXISTS (SELECT /*+ */ 0 FROM “test2″ “A” WHERE
“A”.”type”=1 AND (“A”.”RULE_ID”=152 OR “A”.”RULE_ID”=153 OR
“A”.”RULE_ID”=154) AND LNNVL(“A”.”APP_ID”<>:B1)))
3 – filter(“T”.”status”=1)
4 – filter(“A”.”type”=1 AND (“A”.”RULE_ID”=152 OR “A”.”RULE_ID”=153 OR
“A”.”RULE_ID”=154) AND LNNVL(“A”.”APP_ID”<>:B1))
Statistics
———————————————————-
0 recursive calls
0 db block gets
1762169 consistent gets
0 physical reads
0 redo size
519 bytes sent via SQL*Net to client
492 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
21 rows selected.
优化后:
select count(*) from(
select t.id
from test t
where t.status = 1
minus
select distinct a.app_id
from test2 a
where a.type = 1
and a.rule_id in (152, 153, 154))
17:23:33 laojiu>@plan
PLAN_TABLE_OUTPUT
————————————————————————————————————————-
Plan hash value: 631655686
————————————————————————————————–
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
————————————————————————————————–
| 0 | SELECT STATEMENT | | 1 | | | 1501 (2)| 00:00:19 |
| 1 | SORT AGGREGATE | | 1 | | | | |
| 2 | VIEW | | 1141 | | | 1501 (2)| 00:00:19 |
| 3 | MINUS | | | | | | |
| 4 | SORT UNIQUE | | 1141 | 20538 | | 846 (2)| 00:00:11 |
|* 5 | TABLE ACCESS FULL| test | 1141 | 20538 | | 845 (2)| 00:00:11 |
| 6 | SORT UNIQUE | | 69527 | 814K| 3632K| 654 (2)| 00:00:08 |
|* 7 | TABLE ACCESS FULL| test2 | 84140 | 986K| | 308 (2)| 00:00:04 |
————————————————————————————————–
Predicate Information (identified by operation id):
—————————————————
5 – filter(“T”.”status”=1)
7 – filter(“A”.”type”=1 AND (“A”.”RULE_ID”=152 OR “A”.”RULE_ID”=153 OR
“A”.”RULE_ID”=154))
21 rows selected.
Statistics
———————————————————-
1 recursive calls
0 db block gets
2240 consistent gets
0 physical reads
0 redo size
516 bytes sent via SQL*Net to client
492 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
1 rows processed
在优化sql的时候,我们需要转变一下思路,等价的改写sql;
改写后的sql由于逻辑读得到了天翻地覆的改变,很快得到结果。
第一条sql执行计划中有一个函数,LNNVL(“A”.”APP_ID”<>:B1),lnnvl(exp)
如果exp的结果是false或者是unknown,那么lnnvl返回true;
如果exp的结果是true,返回false.


猜你喜欢
- 什么是转义字符转义字符是一个计算机专业词汇。在计算机当中,我们可以写出123 ,也可以写出字母abcd,但有些字符我们无法手动书写,比如我们
- 现在小编已经学习语言程序良久,但是在了解以后,如果让小编再去学习语言要入手入口,一定是先从掌握函数开始了解,原因很简单,任何一个代码串都是有
- 一、概述1、描述变量类型注解是用来对变量和函数的参数返回值类型做注解,让调用方减少类型方面的错误,也可以提高代码的可读性和易用性。但是,变量
- 本文实例讲述了php+redis实现注册、删除、编辑、分页、登录、关注等功能。分享给大家供大家参考,具体如下:主要界面连接redisredi
- 背景: 在phpwind站点后台添加一个名为“广告管家”(广告管家为CNZZ的一款广告投放的应用)的应用,整个“广告管家”的应用是通过ifr
- 在pytorch训练过程中可以通过下面这一句代码来打印当前学习率print(net.optimizer.state_dict()['
- 前言web是一个开放的平台,这也奠定了web从90年代初诞生直至今日将近30年来蓬勃的发展。然而,正所谓成也萧何败也萧何,开放的特性、搜索引
- 在Windows下使用VSCode编译运行,都出现中文乱码的问题,今天我就遇见了这种情况,上网搜了半天也没有找到正确的解决方法,现将我把我的
- 本文实例为大家分享了python网络爬虫的笔记,供大家参考,具体内容如下(一) 三种网页抓取方法1、 正则
- 昨天晚上群里有朋友采集网页时发现file_get_contents 获得的网页保存到本地为乱码,响应的header 里 Content-En
- 要介绍Python的三元表达式,可以先看看其他编程语言比如C,JAVA中应用:public class java { public stat
- 大家经常在网上登陆的时候经常会看到让你输入验证码,有的是文字的,有的呢是图片,比如chinaren.com校友录中留言的时候,我们就会看到数
- 中间件是一个钩子框架,它们可以介入 Django 的请求和响应处理过程。 它是一个轻量级、底层的 插件 系统,用于在 全局修改 Django
- 非常好的边框样式设置工具,使用该工具您可以很方便的为DIV设置简单的边框样式,如果放在DW中会更好。会制作DW插件的高手,请帮忙制作成DW插
- 本书的作者Douglas Crockford是JavaScript开发社区最知名的权威,JavaScript的发明人Brendan Eich
- 具体代码如下:Function ASTCreateFtpSite(IPAddress, RootDirectory,&n
- 目录1. 配置Python环境变量2. 安装Python编辑器,并在其中配置Python3. 安装控制包uiautomator2,和其它辅助
- 本文实例为大家分享了Python实现打乒乓小游戏的具体代码,供大家参考,具体内容如下源码奉上:import sysimport cfgimp
- 语法JavaScript的语法和Java语言类似,每个语句以;结束,语句块用{...}。但是,JavaScript并不强制要求在每个语句的结
- 1、利用File Watchersgoland->Preferences->搜索框内输入 file watchers->选