About - CONNECT_BY_FILTERING
再次碰到一个诡异的事情,同样的SQL在两个类似数据库中执行时间相差非常之多。直观反应就是执行计划不一样,果不其然。
在跑得很快的环境中的执行计划,

但是在另外一个环境中的执行计划却是,

从执行计划中可以看到低效的执行计划的consistent gets相当之高,差别就在于connect by走了 “CONNECT BY NO FILTERING WITH SW(UNIQUE)" 操作,而不是 "CONNECT BY WITH FILTERING(UNIQUE)"操作。
可以用hint - CONNECT_BY_FILTERING 试下,结果执行计划就变成了,

可以看到执行计划变了,consistent gets下降得非常之多。
其实仔细想想,执行计划不正确在很多情况下是因为statistics不够准确。这也能从Note: - dynamic sampling used for this statement (level=2)可以看出来。
尝试下收集下表上的统计信息,然后把hint去掉,结果执行计划就正确了,而且也没有用dynamic sampling了,

~~~~~~~
See in-depth analysis here - http://rwijk.blogspot.com/2012/03/connect-by-filtering.html
About - CONNECT_BY_FILTERING的更多相关文章
- Oracle 关于V$OPEN_CURSOR
参考链接:http://www.askmaclean.com/archives/about-dynamic-view-open_cursor.html#wrap 在之前的一次讨论中,有同行指出V$OP ...
- Oracle执行计划学习笔记
目录 一.获取执行计划的方法 (1) explain plan for (2) set autotrace on (3) statistics_level=all (4) dbms_xplan.dis ...
- [转载]循规蹈矩:快速读懂SQL执行计划的套路与工具
作者介绍 梁敬彬,福富研究院副理事长.公司唯一四星级内训师,国内一线知名数据库专家,在数据库优化和培训领域有着丰富的经验.多次应邀担任国内外数据库大会的演讲嘉宾,在业界有着广泛的影响力.著有多本畅销书 ...
- AWR Report 关键参数详细分析
WORKLOAD REPOSITORY report for DB Name DB Id Instance Inst num Startup Time Release RAC CALLDB 12510 ...
- Oracle里的执行计划
1 执行计划的查看 1 explan plan 2 dbms_xplan包 3 sqlplus中 set autot 4 10046 5 awr报告 6一些现成的脚本 7 10053 常见的就前4种 ...
- Oracle 11g 递归+ exists运行计划的改变
有一个递归查询在10g上执行非常快,但在11g上执行不出来. SQL> select * from v$version; BANNER ----------------------------- ...
- 树形查询SQL优化一例
上周五一哥们发了条SQL,让我看看,代码如下: SELECT COUNT(1) FROM (select m.sheet_id from cpm_main_sheet_history m, cpm_s ...
- 《收获,不止SQL优化》读书笔记
整体性能分析 AWR.ASH.ADDM.AWRDD 整体分析调优工具 AWR:关注数据库的整体性能的报告: ASH:数据库中的等待事件与哪些SQL具体对应的报告: ADDM:oracle给出的一些建议 ...
- Oracle Hint用法整理笔记
目录 1./+ result_cache / 2./+ connect_by_filtering / 3./+ no_unnset / 4./+ index(表别名 索引名) / 5./+ INDEX ...
随机推荐
- C#.NET常见问题(FAQ)-无法直接启动带有类库输出类型的项目怎么办
我把Driver.cs文件去掉了一行注释,发现报错 右击这个解决方案,选择属性,然后再启动项目中改成MySample 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http:// ...
- ArcGIS放射状流向地图
今年百度推出了一个百度迁徙,在其他人看是好像是还挺专业的,其实不复杂.下面是百度的迁徙图示例:从图中可以看出从一个城市到另一个城市迁徙的直线路径,多个路径可以反映城市是否为热点城市,即人口流动比较大. ...
- Eclipse中SVN修改的*星号没了,解决方法
Eclipse中SVN修改的*星号没了,解决方法 打开Preference 第一步:去掉外加的 ">" 第二步:勾选Outgoing changes 这样做之后," ...
- uni - 介绍
uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS.Android.H5.小程序等多个平台 优点:基于vue.mpvue.微信小程序 微信小程序AP ...
- PHP表单-PHP $_POST 变量
PHP $_POST 变量 在 PHP 中,预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值. $_POST 变量 预定义的 $_POST 变量用 ...
- Hibernate(七)一对一映射
一.创建数据库表 --班级表 create table grade ( gid number primary key, --班级ID gname ), --班级名称 gdesc ) --班级介绍 ); ...
- Linux软件安装方法
常用的两种软件安装方法: 1.RPM软件安装 rpm -qi 软件名 查询 rpm -ivh *.rpm 安装 rpm -e 软件名 卸载 系统自带的一些rpm包在系统镜像的Server文件夹里,需要 ...
- Android:子线程向UI主线程发送消息
在Android里,UI线程是不同意被堵塞的.因此我们要将耗时的工作放到子线程中去处理. 那么子线程耗时处理后要如何通知UI线程呢? 我们能够在UI主线程中创建一个handler对象,然后通过重写其h ...
- 深入理解Object提供的阻塞和唤醒API
深入理解Object提供的阻塞和唤醒API 前提 前段时间花了大量时间去研读JUC中同步器AbstractQueuedSynchronizer的源码实现,再结合很久之前看过的一篇关于Object提供的 ...
- Closing a window
The obvious way to how to close a window is to click on the x mark on the titlebar. In the next exam ...