这个语句如何优化比较好啊?

[复制链接]
查看11 | 回复9 | 2008-2-13 12:43:03 | 显示全部楼层 |阅读模式
大家帮忙看看下面的语句如何优化比较好:
select * from
(select T0.NSID as ColAlias1, T0.ID as ColAlias2, T0.VERSION as ColAlias3, T0.NAME as ColAlias4, T0.FIRSTNAME as ColAlias5, T0.BIRTHDATE as ColAlias6, T0.ISCUSTOMER as ColAlias7, T0.ISBROKER as ColAlias8, T0.ISINSURABLE as ColAlias9, T0.ISHEALTHCAREPROVIDER as ColAlias10, T0.SSN as ColAlias11
from AWFACTOR T0
where (T0.H_ISKILLED = 0)
and ( (T0.H_CLID=218108948) or (T0.H_CLID=218111885))
Order By T0.NAME, T0.FIRSTNAME)
where ROWNUM <= 20;
用EM做了个Snapshot然后ADDM,Oracle说这个语句占用了大量的物理内存,分页占用了大量的虚拟内存
查了一下确实是AWFACTOR表有50w行数据,约束条件后的结果集也接近50w行,但是要只取出前20行来,有没有一个办法直接取出前20行,而不是先将全部结果集放入buffer cache,再取出前20行啊?????
谢谢
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
把执行计划帖出来,照你的描述,那应该走T0.NAME, T0.FIRSTNAME 这2个的组合索引
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
哎丫,这下麻烦了,我改了个参数shutdown了DB,然后启动不起来了。。。。。。。。
windows 2003 server,从服务中也启动不起来了,说是:could not start the OracleService。。。 on Local Computer
Error 1067:The process terminated unexpected
但是刚才shutdown的时候没出现任何错误啊。。。。。。。
求救求救。。。。。。。
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
Oracle 10g R2
Windows 2003 server 64bits
listener都正常
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
先把oracle相关的进程杀了看看
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
我已经把此数据库相关的进程都关了啊。。。。EM什么的。我看没有别的了。。。。。
还是同样的问题啊。。。。。
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
oradim -startup -sid xxx
的方法启动看看alert中的错误
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
试试楼上的
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
正在重启system,等弄好了,我把执行计划贴上来
但是在我印象中没有 T0.NAME, T0.FIRSTNAME 2个的组合索引
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
先看执行计划在做任何改动。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行