首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

求助,怎么优化这段SQL语句,求方法思路

2011-12-17 
求助,如何优化这段SQL语句,求方法思路。SQL codeselect a.jgbh,a.jgmc,a.jgdm,a.jgjb,(select nvl(count(*)

求助,如何优化这段SQL语句,求方法思路。

SQL code
select a.jgbh,a.jgmc,a.jgdm,a.jgjb,       (select nvl(count(*),0) as xlzs from t_sc_sbzb where jgbh=a.jgbh and sjsbid='XLZXL'        and dydjid='8c196deec1e6446db45b41107b9c924c') as xlzs, --1.188               (select nvl(count(*),0) as sl from t_sys_jgb jgb,t_sc_sbzb sb,t_sc_pdsb_pjmx_xl xl     where jgb.jgbh=sb.jgbh and sb.sbid=xl.sbid and to_char(xl.pdrq,'yyyy')='2007'     and jgb.jgbh=a.jgbh and xl.xldy='10KV' ) as xlpj,--1.687               (select nvl(count(*),0) as sl from t_sys_jgb jgb,t_sc_sbzb sb,t_sc_pdsb_pjmx_xl xl     where jgb.jgbh=sb.jgbh and sb.sbid=xl.sbid and to_char(xl.pdrq,'yyyy')='2007'     and jgb.jgbh=a.jgbh and xl.xlpddj='一类设备' and xl.xldy='10KV') as xlpj1,  --2.922                 (select nvl(sum(gt.dj),0)/1000 as xlzcd from t_sc_sbzb sb,t_sc_sbzb sb1,t_sc_gtxx gt,          t_sys_jgb jgb,t_sc_xl xl          where sb.jgbh=jgb.jgbh and sb.sbid=sb1.sjsbid and sb1.sbid=gt.sbid and sb.sbid=xl.sbid           and jgb.jgbh=a.jgbh and sb.sbzt='运行' and sb.dydjid='8c196deec1e6446db45b41107b9c924c'           )+                 --2.485         (select nvl(sum(pds.dj),0)/1000 as xlzcd from t_sc_sbzb sb,t_sc_pds pds,t_sys_jgb jgb          where jgb.jgbh=sb.jgbh and sb.sbid=pds.sbid and jgb.jgbh=a.jgbh and sb.sbzt='运行'          and sb.dydjid='8c196deec1e6446db45b41107b9c924c' )         as xlzcd,  --1.162         from t_sys_jgb awhere a.state='有效' and a.jgbm<>'变电站级' and   a.xjjgbhc like'%da342c926f264fb0bacfc5c2f68db271%'  --25.203      and jgjb<=3 order by a.jgjb

如题:这种类型的SQL语句,有没有好的方法能提高查询速度,

[解决办法]
好长的句子,还有错误。赫赫。
看了一下,只能说,
可以的话,把相同的表的抽取,合并起来,不抽取两次。会比你现在的做法快一些。

比如,第一个合计,第4个合计,第5个合计,就可以合并。形成第一个新的结果集。
第二个合计,第三个合计可以合并。形成第二个新的结果集。

合并方式,
select sum(decode(f1,'Y',1,0)),sum(decode(f1,'N',1,0)) from .....

可以使用sum,以及decode或者case之类来做到。对第一个,第二个新的结果集取数据。


热点排行