码迷,mamicode.com
首页 > 数据库 > 详细

Oracle 自动生成的视图VM_NSO_1

时间:2017-09-01 17:50:40      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:2-2   cbo   from   测试   code   table   settings   red   physical   

作者:Jerry

有时候优化sql的时候,在执行计划中看到有VM_NSO_X的视图,在Oracle定义中,可以吧NSO理解为nested subquery optimizing,功能就是把in转换为join,把not in转换为anti join等,当然转换的时候有一定的限制。下面我们来简单看下会生成VM_NSO_1视图的几个例子

1. 创建2个测试表

 

 

 

 

 

 

可以从上面的sql得出一个简单的结论,当子查询中出现max,rownum,group by,union all,minus,intersect等聚合函数的时候,Oracle就会自动把子查询转换成视图VM_NSO_X,其实在Oracle的子查询中如果出现上面的几种情况,也就限制了view merge,就无法对视图进行merge。如果需要去掉CBO生成VM_NSO_1,只需要在子查询中加一个no_unnest限制,这样CBO就会走filter了。下面看一个加了no_unnest的执行计划

 

 

Oracle 自动生成的视图VM_NSO_1

标签:2-2   cbo   from   测试   code   table   settings   red   physical   

原文地址:http://www.cnblogs.com/lxl57610/p/7464117.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!