我想做一下表空间估算的统计,需要排除一些表,但因为生产数据量过大,统计太慢,所以在自己虚拟机上测试了一下,但改写之后得出的结果是错误的,请教大家我错在哪里。
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';