首页 新闻 会员 周边 捐助

Oracle SQL 速度太慢

0
悬赏园豆:10 [已解决问题] 解决于 2012-07-06 14:04

select * from (select c.*,rownum rn from(

SELECT distinct a.热线工单号,漏水地址,派工时间,反馈时间,
to_char(填单时间,'yyyy/mm/dd hh24:mi:ss') as 填单时间,
a.签证时间, 
CASE 
WHEN ((反馈时间 is null) and (day_count(sysdate , 派工时间) * 24 * 60 - 处结时间)<= 0) or  ((day_count(反馈时间 , 派工时间) * 24 * 60 - 处结时间) <= 0) THEN '正常' 
WHEN ((反馈时间 is null) and (day_count(sysdate , 派工时间) * 24 * 60 - 处结时间)> 0) or ((day_count(反馈时间 , 派工时间) * 24 * 60 - 处结时间) > 0) THEN '超时'   
ELSE '异常' END AS 回复情况,

CASE   
when ((填单时间 is null) and day_count(sysdate,反馈时间)>3) or ((是否审核通过 >= 1) and day_count(填单时间,  反馈时间)>3) then '超时' 
WHEN ((是否审核通过 >= 1) and day_count(填单时间 , 反馈时间) <=3) or ((填单时间 is null) and day_count(sysdate , 反馈时间) <=3) THEN  '正常'   
ELSE '其他情况' END AS 填单情况,

CASE 
when (a.签证时间 is null) and day_count(sysdate , 填单时间) >3  THEN  '超时(未签证)'
when ((a.签证时间 is null) and day_count(sysdate , 填单时间)  <= 3) THEN  '正常(未签证)'
WHEN (是否审核通过 = 2 AND day_count(a.签证时间 , 填单时间)  > 3) THEN  '超时(已签证)' 
WHEN (是否审核通过 = 2 AND day_count(a.签证时间 , 填单时间)  <= 3) THEN  '正常(已签证)' 
ELSE '其他情况' END AS 签证情况 ,
b.热线工单号 as 工单 ,a.rowid rid,b.rowid rb FROM JINANFIXINFO a left join jinanfixrz b on a.热线工单号=b.热线工单号 where  是否审核通过<>5 ORDER BY a.派工时间 desc)c where rownum <=30 ) where rn>0

我调试了,是由于case 和 when 太多,去掉其中几个速度会很多,全部都执行的话需要等好几分钟(几万条记录),请问各位大神,有没有什么比较快的办法?谢谢. ..!!

wanmingtom的主页 wanmingtom | 初学一级 | 园豆:4
提问于:2011-08-25 10:51
< >
分享
最佳答案
1

搞成存储过程,速度应该会好一些吧【oracle引擎不能每次分析这么复杂的sql】

收获园豆:10
2012 | 高人七级 |园豆:21645 | 2011-08-26 13:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册