1、show parameter workarea_size_policy 如果是auto不用动(缺省应该是),如果不是:
alter system set workarea_size_policy=auto;
2、alter system set pga_aggregate_target=200M;我觉得这个值最底也是200M吧,不过你这表很大,我建议你执行这个查询的时候把这个值设得再大一点(如果资源允许的话),哪怕执行完再改回来
3、analyze table a11_detail compute statistics for table for all indexed columns for all indexes;
4、执行你的SQL,我猜这个时候Oracle应该足够聪明了,它会走HASH JION的。如果还是很慢就放弃,执行下面的SQL:
select /*+use_hash(a b) full(a) full(b) */
a.user_name,count(*) dup_num,
sum(least(a.stop_time,b.stop_time)-b.start_time) duptime_sum
from
adsl11_detail a,adsl11_detail b
where
a.user_name=b.user_name
and a.nas_ip=b.nas_ip
and a.nas_port=b.nas_port
and a.start_time<b.start_time and a.stop_time-1/288>b.start_time
and a.frame_ip!=b.frame_ip
group by
a.user_name
having
count(*)!=0;