ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 那个会更好?(续)

那个会更好?(续)

原创 Linux操作系统 作者:lfree 时间:2007-05-08 00:00:00 0 删除 编辑

例子摘自:《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博客 ” ,链接:http://blog.itpub.net/267265/viewspace-83026/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 那个会更好?
下一篇: V$SQLAREA解析
请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    2286
  • 访问量
    6027494