例子摘自:《oracle高效设计》
链接:http://lfree.itpub.net/post/4950/285051
select *
from big_table t1
where last_ddl_time = (select max(last_ddl_time)
from big_table t2
where t2.owner = t1.owner )
/
select *
from big_table t1, ( select owner, max(last_ddl_time) max_time
from big_table
group by owner ) t2
where t1.owner = t2.owner
and t1.last_ddl_time = t2.max_time
/
select owner, last_ddl_time, object_name, object_type
from ( select t1.*,
max(last_ddl_time) over (partition by owner) max_time
from big_table t1
)
where last_ddl_time = max_time
/
将big_table加大1倍,然后在执行以上操作。执行计划不变。
show paramater sga
sga_max_size big integer 256M
sga_target big integer 256M
测试发现:
例子1,2:执行时间:6XX msecs。
例子3(pga_aggregate_target=80M)下:14 secs
例子3(pga_aggregate_target=2000M)下:8xx msecs。
如果在继续加大big_table表,例子3的执行效率才能更好。
说明一个问题:虽然例子3仅仅扫描一次表,但是要很大的排序空间。例子1,2要扫描表两次,但是
它消耗tmp空间小,如果在pga_aggregate_target很小的情况下,例子1,2要好许多。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-83026/ ,如需转载,请注明出处,否则将追究法律责任。