当前位置: 代码迷 >> Oracle开发 >> 请问 :not in 与not exists的改写
  详细解决方案

请问 :not in 与not exists的改写

热度:75   发布时间:2016-04-24 06:26:40.0
请教 :not in 与not exists的改写。
我想做一下表空间估算的统计,需要排除一些表,但因为生产数据量过大,统计太慢,所以在自己虚拟机上测试了一下,但改写之后得出的结果是错误的,请教大家我错在哪里。
SQL>   select sum(bytes) / 1024 / 1024 kb
  2    from dba_segments  where segment_name not in (select table_name from tony.test001);
        KB
----------
  842.6875


SQL> select sum(bytes) / 1024 / 1024 kb
  2    from dba_segments,tony.test001
  3    where not exists(select *  from dba_segments where dba_segments.SEGMENT_NAME=tony.test001.table_name AND DBA_SEGMENTS.OWNER='tony');

        KB
----------
   1710.75

为什么改写之后,容量变成了两倍,请教各位我错在哪里。
------解决思路----------------------
第二句的逻辑不对啊  
 select sum(bytes) / 1024 / 1024 kb
 from dba_segments a
 where not exists(select 1  from tony.test001 b where a.SEGMENT_NAME=b.table_name )
 AND a.OWNER='tony';
     
试试这个呢
  相关解决方案