当前位置: 代码迷 >> Oracle开发 >> oracle查询优化有关问题
  详细解决方案

oracle查询优化有关问题

热度:73   发布时间:2016-04-24 06:29:24.0
oracle查询优化问题
select cardrptactorg.orgno,
                                  sum(cardrptactorg.RPTAMT10) as aa,
                                  NVL(sum((select sum(t1.rptnum10 - 1)
                                            from cardrptacttlr t1
                                           where t1.rptnum10 <> '0'
                                             and t1.tlrtype = 'A'
                                             and t1.orgno in
                                                 (SELECT DISTINCT toli.orgno
                                                    FROM orglvinfo toli
                                                   START WITH (toli.orgno in
                                                              (cardrptactorg.orgno))
                                                  CONNECT BY NOCYCLE
                                                   PRIOR toli.orgno =
                                                              toli.porgno)
                                             and t1.actdate =
                                                 cardrptactorg.actdate)),
                                      '0') as bb,
                                  sum(cardrptactorg.RPTAMT0) as cc,
                                  NVL(sum((select sum(t.rptnum0 - 1)
                                            from cardrptacttlr t
                                           where t.rptnum0 <> '0'
                                             and t.tlrtype = 'A'
                                             and t.orgno in
                                                 (SELECT DISTINCT toli.orgno
                                                    FROM orglvinfo toli
                                                   START WITH (toli.orgno in
                                                              (cardrptactorg.orgno))
                                                  CONNECT BY NOCYCLE
                                                   PRIOR toli.orgno =
                                                              toli.porgno)
                                             and t.actdate =
                                                 cardrptactorg.actdate)),
                                      '0') as dd,
                                  sum(cardrptactorg.RPTAMT11) as ee,
                                  sum(cardrptactorg.RPTNUM11) as ff
                             from cardrptactorg
                            where 1 = 1
                              and cardrptactorg.orgno in (020)
                              and cardrptactorg.ACTDATE <= '20141226'
                            GROUP by cardrptactorg.orgno
效率非常低,该怎么优化一下????
------解决思路----------------------
orgno
ACTDATE

列上建立复合索引试试
------解决思路----------------------
看了下你的两个子查询语句基本是一样的,可以把你的两个子查询写成一个查询放在from后面与cardrptactorg进行连接
先试试吧,上面仅从语句角度分析,如果还慢的话,请提供执行计划,根据执行计划进行优化
------解决思路----------------------
执行计划, 表结构贴出来。。。。 
------解决思路----------------------
where t.rptnum0 <> '0'
这种都改成where t.rptnum0 <> 0
你还是把表结构和执行计划贴出来, 让大家一起帮你分析吧。
------解决思路----------------------
分析函数使用改写这段  NVL(sum((select sum(t.rptnum0 - 1)
 不要这么多SQL全圈套在SELECT里面,如果里面数据量大你能快才怪。
------解决思路----------------------
in 换成 exists  简历符合索引   像这样的cardrptactorg.orgno in (020)   干嘛不直接用等于?   
  相关解决方案