Oracle 自动生成的视图VM_NSO_1

Posted 李慕白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 自动生成的视图VM_NSO_1相关的知识,希望对你有一定的参考价值。

作者: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的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 创建和视图结构一样的表

Oracle设置物化视图的自动刷新

oracle物化视图不会自动更新是怎么回事

oracle视图和索引

oracle_online table redefinition_2

oracle 自动启动