上一篇提到的UNION/UNION ALL会影响执行计划,再次碰到一个类似的问题。一个SQL加了DISTINCT跟不加DISTINCT的执行计划完全不同,导致执行时间差了好多倍。

原始的SQL如下所示, (注意DISTINCT)

执行计划如下所示,

这个执行计划最耗时的一步是"BUFFER SORT"执行了6982次。当然这个跟View - V_TEMP_口口_PROP_HIST 有一定关系。不过要知道 IN 子查询的结果集最多是1,因为用了ROWNUM=1. (其实在这个例子中结果集是NULL).

仔细看这个执行计划就会发现优化器是先对V_TEMP_口口_PROP_HIST 进行处理,然后进行过滤IN子查询! 这是个相当不高效的做法 - 注意执行计划中的 ”FILTER“ 操作。

但是当把DISTINCT去掉之后的话,执行计划就会大相径庭。

执行计划如下,

这次看到优化器还用了NL,而不是FILTER. 而且很聪明滴用了IN 子查询作为驱动表,然后跟外围查询做Nested Loop Join. 因为子查询的结果集为NULL,很显然JOIN操作其实也不会执行了,从"STARTS"可以看得很清楚!

有时候真是搞不清楚优化器是怎么生成执行计划的,郁闷... 这得了解优化器的实现机制才能得到答案了,我猜...

不过解决这个SQL的方式很简答了,就是把IN改成普通的表连接方式。”显示“地告诉优化器走表连接,而不是做FILTER操作。

"DISTINCT" make huge difference的更多相关文章

  1. Google C++ Style Guide

    Background C++ is one of the main development languages used by many of Google's open-source project ...

  2. Named function expressions demystified

    Introduction Surprisingly, a topic of named function expressions doesn't seem to be covered well eno ...

  3. Google C++ 代码规范

    Google C++ Style Guide   Table of Contents Header Files Self-contained Headers The #define Guard For ...

  4. [C4] Andrew Ng - Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization

    About this Course This course will teach you the "magic" of getting deep learning to work ...

  5. [C3] Andrew Ng - Neural Networks and Deep Learning

    About this Course If you want to break into cutting-edge AI, this course will help you do so. Deep l ...

  6. [C2P3] Andrew Ng - Machine Learning

    ##Advice for Applying Machine Learning Applying machine learning in practice is not always straightf ...

  7. 吴恩达深度学习课后习题第5课第1周第3小节: Jazz Improvisation with LSTM

    目录 Improvise a Jazz Solo with an LSTM Network Packages 1 - Problem Statement 1.1 - Dataset What are ...

  8. 【转载学习前辈的经验】-- Mistakes I made (as a developer) 我(作为一名开发者)所犯过的错误

    我 2006 年开始工作,至今已经 10 年.10 年是个里程碑,我开始回顾自己曾经犯过的错误,以及我希望从同行那里得到什么类型的忠告.一切都在快速改变,10 年了,我不能确定这些秘诀是否还有用. 不 ...

  9. redis该如何分区-译文(原创)

    写在最前,最近一直在研究redis的使用,包括redis应用场景.性能优化.可行性.这是看到redis官网中一个链接,主要是讲解redis数据分区的,既然是官方推荐的,那我就翻译一下,与大家共享. P ...

随机推荐

  1. hdu1027 Ignatius and the Princess II (全排列 & STL中的神器)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1027 Ignatiu ...

  2. 修复损坏的 shapefile

    一.SHP文件 Shapefile文件(简称SHP)作为ESRI一种经典的数据格式,被很多其他软件所支持,如CAD.MapGIS等,虽然也有一些限制(如无法进行拓扑分析.字段长度为10个字符等),但其 ...

  3. AsyncTask 和 Thread 区别

    一.AsyncTask是封装好的线程池,比起Thread+Handler的方式,AsyncTask在操作UI线程上更方便,因为onPreExecute().onPostExecute()及更新UI方法 ...

  4. IIS 之 线程池最大线程数

    .net4.0,32位机器最大线程数,每核1023个 .net4.0,64位机器最大线程数,每核32768个 .net3.0,最大线程数,每核250个 .net2.0,最大线程数,每核25个 默认的最 ...

  5. 使用Draw rect 绘制圆角矩形

    - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); UIGraphicsPush ...

  6. poj 2486 Apple Tree (树形背包dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: poj-2486 题意 给一个n个节点的树,节点编号为1~n, 根节点为1, 每个节点有一个权值.    从 ...

  7. sonarqube 指定jdk

    D:\sonarqube-6.3\conf\wrapper.conf wrapper.java.command=D:/other/jdk1.8.0_25/bin/java

  8. 【SPSS】软件介绍

    SPSS软件是美国斯坦福大学三位学生1968年研制开发的统计软件,SPSS是Statistical Package for Social Science(社会科学软件统计包)的缩写,2000年SPSS ...

  9. 媒体类型(MIME类型)

    # encoding=utf-8 #python 2.7.10 #xiaodeng #HTTP权威指南 #HTTP协议:超文本传输协议是在万维网上进行通信时所使用的协议方案. #媒体类型: #HTTP ...

  10. shell随机读取一行

    使用shell随机读取文件的一行数据 shuf -n1 file_name