度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 219|回复: 9

[分享] Not in 和 not exists

[复制链接]

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-6-3 17:21:13 | 显示全部楼层 |阅读模式
[size=13.3333px]Not exists 的意思是,关联查询,返回除了关联子查询所得结果之外的值,
[size=13.3333px]
看如下的执行计划和代价便可以看出来。两者的差距。


SCOTT@ rac1>select * from emp where  empno not in  (select empno from t4 where  t4.deptno=20) ;9 rows selected.Elapsed: 00:00:01.72Execution Plan----------------------------------------------------------Plan hash value: 3504968978---------------------------------------------------------------------------| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |---------------------------------------------------------------------------|   0 | SELECT STATEMENT   |      |    20 |  1120 |  6130   (2)| 00:00:01 ||*  1 |  HASH JOIN ANTI NA |      |    20 |  1120 |  6130   (2)| 00:00:01 ||   2 |   TABLE ACCESS FULL| EMP  |    20 |   600 |     3   (0)| 00:00:01 ||*  3 |   TABLE ACCESS FULL| T4   |  1354K|    33M|  6120   (2)| 00:00:01 |---------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - access("EMPNO"="EMPNO")   3 - filter("T4"."DEPTNO"=20)Note-----   - dynamic sampling used for this statement (level=2)Statistics----------------------------------------------------------          0  recursive calls          1  db block gets      43236  consistent gets      21573  physical reads          0  redo size       1391  bytes sent via SQL*Net to client        524  bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)          9  rows processedSCOTT@ rac1>select * from emp where  not exists (select empno from t4 where emp.deptno=t4.deptno and t4.deptno=20) ;9 rows selected.Elapsed: 00:00:05.45Execution Plan----------------------------------------------------------Plan hash value: 3745834269--------------------------------------------------------------------------------| Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time     |--------------------------------------------------------------------------------|   0 | SELECT STATEMENT   |           |    20 |   860 |  2033  (98)| 00:00:01 ||   1 |  NESTED LOOPS ANTI |           |    20 |   860 |  2033  (98)| 00:00:01 ||   2 |   TABLE ACCESS FULL| EMP       |    20 |   600 |     3   (0)| 00:00:01 ||*  3 |   INDEX RANGE SCAN | DEPTNOIND |     1 |    13 |   101  (99)| 00:00:01 |--------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   3 - access("T4"."DEPTNO"=20)       filter("EMP"."DEPTNO"="T4"."DEPTNO")Note-----   - dynamic sampling used for this statement (level=2)Statistics----------------------------------------------------------          0  recursive calls          0  db block gets       7754  consistent gets       7724  physical reads          0  redo size       1374  bytes sent via SQL*Net to client        524  bytes received via SQL*Net from client          2  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)          9  rows processed
[size=13.3333px]最后来写个总结,之前到现在一共写了三篇关于 exists 的文章,自觉有点繁琐。但也是自己不断学习的过程。很多东西还是需要自己不断的去操作,思考。总结。言归正传。
[size=13.3333px]
exists 和 in 在两张表差不多大小的情况下,效率,速度,是不会相差很大的。
[size=13.3333px]
在一大一小的情况下是存在效率上的差别的。尽管他们的执行计划有可能是相同的。 exists 更适用于 子表大,in 适用于父表大。具体请看第二篇。
[size=13.3333px]
not exsits 与not in 相比,not in 之前已经看过了,并不会走相关的索引。所以,尽量使用 not exists。
[size=13.3333px]
另,这两个查询中如果有null值,会返回全部的结果集。所以注意写语句的时候尽量避开null值。


回复

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-6-4 17:51:01 | 显示全部楼层
回复 支持 反对

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
发表于 2018-6-5 14:46:43 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-6-5 17:46:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
发表于 2018-6-8 15:41:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-6-8 17:40:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
发表于 2018-6-9 15:37:35 | 显示全部楼层
回复 支持 反对

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
发表于 2018-6-9 15:37:46 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-6-9 17:57:19 | 显示全部楼层
回复 支持 反对

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
发表于 2018-6-10 17:03:16 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2018-9-18 21:30 , Processed in 0.273936 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表