SEIANG@seiang11g>
select * from wjq1
where exists (select 1 from wjq2 where wjq1.object_name=wjq2.table_name and
wjq2.table_name like 'M%');
SEIANG@seiang11g>
select /*+ rule*/ *
from wjq1 where exists
(select 1 from wjq2 where wjq1.object_name=wjq2.table_name and wjq2.table_name
like 'M%');
通过上面两个执行计划的对比发现:
在这里,我们可以看到实际上,使用in效率比exists效率更高。我们可以这样来理解这种情况:
对于in,RBO优化器选择的内存查询的结果作为驱动表来进行nest loops连接,所以当内存查询的结果集比较小的时候,这个in的效率还是比较高的。
对于exists,RBO优化器则是利用外查询表的全表扫描结果集过滤内查询的结果集,当外查询的表比较大的时候,相对效率比较低。
SEIANG@seiang11g>
select * from wjq2
where exists
(select 1 from wjq1 where wjq1.object_name=wjq2.table_name and wjq1.object_name
like 'S%');
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员