深入剖析:not exists对外层查询的影响

何剑敏

Oracle ACS华南区售后团队,首席技术工程师。供职于Oracle ACS华南区售后团队,首席技术工程师。多年从事第一线的数据库运维工作,有丰富项目经验、维护经验和调优经验,专注于数据库的整体运维。

编辑手记:运维中会面临各种各样的问题,有时候我们不能找到问题的根源就是因为在我们心里,有一个想当然的答案,比如认定了600就是bug,1555就是undo设置不合理,这些想当然的答案在很大程度上阻碍了我们的分析。我们通过今天的分享一起学习如何拨开云雾,发现问题的真相。

同事在12c中跑的buffer get很高,但是在10g中跑的buffer很低。怀疑是不是12c的优化器有问题。接下来我们一起来验证。

本例中的10g的环境和12c的环境,数据量大致一样,只是有很少部分的不同,但是就是这个很少部分不同,造成了not exists中的子查询返回不同的值,进而对外层查询产生不同的影响。我们来用如下的代码模拟一下。

初始化数据:

--10g

--12c

我们看到,12c的数据和10g只是有很少的差别,t1表12c和10g都一样,t2表在12c只是少了一行数据。

--10g

--12c

我们将要执行的sql语句是:

我们先来看执行情况的差距,10g的bufferget小,12c多

--10g

查看执行计划

--12c

看执行计划

可以看到第23,24行,在10g中运行时,buffers是0,而在12c中,即78,79行,buffer是2083+6496。也就是说在本次测试中,10g,外层查询不进行t1和t2的扫描,直接返回结果了,而12c,外层查询还要进行t1表和t2表层扫描才返回结果

那究竟是不是版本的差异呢?

这其实不是10g和12c的差别,而是not exists的返回数据对外层的影响。子查询要返回0行记录,才满足not exist的条件,从而返回外层查询结果。在10g中,子查询返回了一行记录

不满足not exists(即0行才满足),所以,也就不用在外层继续查询了。直接返回记录0行。

在12c中,子查询返回0行记录,满足not exist的条件,所以还需要在外层查询中继续查询。

正是这一行记录的差异,导致了not exists对外层查询的影响。进而导致整个sql的buffer get的差异。

反证这个结果,我只要在12c中,运行子查询结果返回大于0行的,不满足not exists,也应该不会去外层查询了。见下:

看执行计划

可以看到第38,39行的buffer为0.

最终我们验证了,其实并不是版本的差异。所以任何时候,一定要耐心细致地分析问题,拨开云雾,找到故障的根源。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏瓜大三哥

UVM(八)之transaction及field_automation 续

UVM(八)之transaction及field_automation field_automation机制的使用 UVM中使用field_automation...

2278
来自专栏数据科学与人工智能

【SQL技能】浅谈数据分析中的SQL

很久没写东西了,正好群里有童鞋最近要换工作,提到有关数据库方面的问题,个人认为,做数据分析的并没有必要把数据库开发之类的弄懂,你只需要从相应的数据库中调用你需...

2545
来自专栏Java技术栈

分布式ID生成器的解决方案总结

在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们...

3606
来自专栏喔家ArchiSelf

老曹眼中的Lambda世界

“ λ ”像一个双手插兜儿,独自行走的人,有“失意、无奈、孤独”的感觉。λ 读作Lambda,是物理上的波长符号,放射学的衰变常数,线性代数中的特征值……在程序...

752
来自专栏算法与数据结构

流水作业调度问题

n个作业{1,2,3,4....n} 要在 2 台机器M1 M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工完毕后

821
来自专栏PPV课数据科学社区

【一文打尽】SQL 数据分析常用语句.....收藏

• 1 基础查询 • 2 字符串\数字\日期时间 • 3 聚合数据查询 • 4 子查询 • 5 联接\组合查询 • 6 高级查询 • 7 更新数据 阅读提醒:点...

37810
来自专栏云技术

随机IOPS全面超越,腾讯云CSG 存储网关高性能缓存技术详解

CSG存储网关是基于腾讯云高性能、高可靠性的对象存储系统COS对外提供iSCSI、NFS和CIFS/SMB访问协议。作为一种混合云方案, 帮助用户不用修改本地应...

53317
来自专栏牛客网

老虎证券 iOS一面

2@property (weak, nonatomic) id delegate;

291
来自专栏牛客网

【前端面筋】终于等到你!!!

之前一直在牛客刷面筋,今天终于自己也写了一篇,算是秋招的总结吧。希望大家都能顺利拿到自己想要的offer! lz本科妹子,从没有想过要当程序员......无奈非...

39813
来自专栏牛客网

面经--微博&&今日头条

1470

扫描关注云+社区