专栏首页数据和云自相矛盾:Null is Not Null引发的成本误区

自相矛盾:Null is Not Null引发的成本误区

黄玮(Fuyuncat)

资深Oracle DBA,个人网www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价.

在SQL的世界里,总有一些情况是你意想不到的,以下这个案例可以让你理解这样一种情况。

这是一个开发者请求分析的一个SQL,原因是执行计划很让人费解。首先通过Explain执行一次SQL,获取执行计划:

在以下的执行计划中,可以看到第三步骤的执行计划成本为100,而最终的成本却是0,这是让人最为费解之处:

那么仔细观察一下过滤谓词,可以看到一个奇妙之处,第二步骤处有一个过滤谓词信息,这是优化器自动添加上去的,其判定为NULL IS NOT NULL,这显然是一个恒假的条件.

根据这个条件,Oracle无需执行所有SQL,直接返回,这也就是无论执行计划树的成本是多少,最终过滤的成本总是0,SQL无需真正执行。

那么为什么会有这样一个始终为False的条件呢?从SQL中可以看出端倪。

在SQL代码中存在如下条件:

6 AND NVL(MVMT.EVENT_CURRENT_CONTRA_IND,'0')='DELETED' 7 AND NVL(MVMT.EVENT_CURRENT_CONTRA_IND,'0')= 'ROLLBACK'

按照这个条件,'DELETED'='ROLLBACK',这显然不可能,所以出现了恒假的条件,最终确认是程序员的疏忽导致的错误编码。

在程序的世界里,什么事情都可能发生,所以在开发过程中进行必要的SQL审核,不可缺少。

本文分享自微信公众号 - 数据和云(OraNews),作者:黄玮

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-08-31

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle智能之SQL诊断:SQL Tuning Advisor推荐执行计划

    编辑手记:在前一段,一篇智能数据库优化的论文引起广泛的关注,其实在 Oracle 数据库中,已经引入了大量自动化和智能化的方法去进行自动调节,包括在 SQL 层...

    数据和云
  • 常识之外:全表扫描为何产生大量 db file sequential read 单块读?

    编辑手记:在理解Oracle技术细节时,我们不仅应该读懂概念,还要能够通过测试验证细节,理解那些『功夫在诗外』的部分,例如全表扫描和单块读。 开发人员在进行新系...

    数据和云
  • 全表扫描却产生大量db file sequential read一例

    编辑手记:一条看似简单的SQL,执行时间异常惊人,明明是全表扫描,却在undo 表空间产生大量的单块读导致db file sequential read等待事件...

    数据和云
  • 一条SQL生命历程

    1.一条SQL的诞生首先需要通过某种方式传递给数据库。数据库会有一个客户端用来与外界交流,而作为提交SQL的一方,可以通过ODBC或者是JDBC协议直接将SQL...

    哒呵呵
  • 【QMonitor新特性】SQL性能历史跟踪及SQL执行计划变更历史

    业界通常把DBA分为系统DBA和应用DBA两种。对于系统DBA来说,主要的职责是确保数据库系统的稳定和高效的运行。而应用DBA主要是优化应用,以求得一种“更经济...

    沃趣科技
  • java编程学习笔记——mybatis SQL注入问题

      SQL注入攻击,简称SQL攻击或注入攻击,是发生于应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查...

    慕容千语
  • 一次SQL_ID和HASH_VALUE转换尝试引发的误区

    http://blog.csdn.net/bisal/article/details/38919181

    bisal
  • 深扒SQL的历史,说点秘密给你听

    很多学SQL的朋友,或正在用SQL的朋友,都感觉到害怕,最近兴起的大数据,NoSQL会不会终结了SQL的命运,这帮只会SQL的朋友,怎么办?想学吧,又没精力,不...

    用户1564362
  • SQL审核工具发布

    今天将前段时间做的SQL审核工具做了一场发布,邀请了一些后台和前端的开发同事,他们平时可能没有机会坐下来仔细的去审核自己写的SQL,今天通过SQL审核工...

    AsiaYe
  • SQL审核的进展

    最近完成了SQL审核功能的上线,发现用户体验上面还是存在一些问题,具体有以下几点:

    AsiaYe

扫码关注云+社区

领取腾讯云代金券