查看: 4608|回复: 23

[性能调整] sql语句执行过慢,请帮忙看看是否可以进行优化,谢谢!

[复制链接]
论坛徽章:
0
发表于 2011-11-24 17:07 | 显示全部楼层 |阅读模式
在执行如下sql语句的时候,查询到的结果为4100条左右,但需要近5分钟,请各位兄弟姐妹看看是否可以进行优化,语句及执行计划如下:
select *
from (select materialcode,
price,sum(cjnum) cjnum,sum(cjsum) cjsum,sum(ylnum1) ylnum1,sum(ylsum1) ylsum1,sum(ylnum) ylnum,sum(ylsum) ylsum,sum(dlnum) dlnum,sum(dlsum) dlsum,sum(dcnum) dcnum,sum(dcsum) dcsum,sum(qtnum) qtnum,sum(qtsum) qtsum,sum(beginnum) beginnum,sum(beginsum) beginsum,sum(innum) innum,
sum(llnum) llnum,sum(llsum) llsum,sum(thnum) thnum,sum(thsum) thsum,sum(qt2num) qt2num,sum(qt2sum) qt2sum,sum(ycnum1) ycnum1,sum(ycsum1) ycsum1,sum(ycnum) ycnum,sum(ycsum) ycsum,sum(insum) insum,sum(outnum) outnum,sum(outsum) outsum,sum(endnum) endnum,sum(endsum) endsum
from (select a.*,
getManuId_In(orgbillrowid,manuid,outflag) manuid_in,
getBSLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storenum,STOREDATE,'2011-11-01','2011-11-21',outflag,
3) cjnum,
getBSLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storesum,STOREDATE,'2011-11-01','2011-11-21',outflag,
3) cjsum,
getBYLNumByMovetype(decode(dbflag,1,'BDB',rendertype),
movetype,outflag,storenum,STOREDATE,storeid,'2011-11-01','2011-11-21',
1) ylnum1,
getBYLNumByMovetype(decode(dbflag,1,'BDB',rendertype),
movetype,outflag,storesum,STOREDATE,storeid,'2011-11-01','2011-11-21',
1) ylsum1,
getBYLNumByMovetype(decode(dbflag,1,'BDB',rendertype),
movetype,outflag,storenum,STOREDATE,storeid,'2011-11-01','2011-11-21',
2) ylnum,
getBYLNumByMovetype(decode(dbflag,1,'BDB',rendertype),
movetype,outflag,storesum,STOREDATE,storeid,'2011-11-01','2011-11-21',
2) ylsum,
getBDLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storenum,STOREDATE,'2011-11-01','2011-11-21',outflag,
1) dlnum,
getBDLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storesum,STOREDATE,'2011-11-01','2011-11-21',outflag,
1) dlsum,
getBDCNumPeriod(decode(dbflag,1,'BDB',rendertype),
storenum,STOREDATE,'2011-11-01','2011-11-21',outflag,
1) dcnum,
getBDCNumPeriod(decode(dbflag,1,'BDB',rendertype),
storesum,STOREDATE,'2011-11-01','2011-11-21',outflag,
1) dcsum,
getBSLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storenum,STOREDATE,'2011-11-01','2011-11-21',outflag,
2) qtnum,
getBSLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storesum,STOREDATE,'2011-11-01','2011-11-21',outflag,
2) qtsum,
getBSLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storenum,STOREDATE,'2011-11-01','2011-11-21',outflag,
4) thnum,
getBSLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storesum,STOREDATE,'2011-11-01','2011-11-21',outflag,
4) thsum,
getBLLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storenum,STOREDATE,'2011-11-01','2011-11-21',outflag,
1) llnum,
getBLLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storesum,STOREDATE,'2011-11-01','2011-11-21',outflag,
1) llsum,
getBYCNumByMovetype(decode(dbflag,1,'BDB',rendertype),
movetype,outflag,storenum,STOREDATE,storeid,'2011-11-01','2011-11-21',
1) ycnum1,
getBYCNumByMovetype(decode(dbflag,1,'BDB',rendertype),
movetype,outflag,storesum,STOREDATE,storeid,'2011-11-01','2011-11-21',
1) ycsum1,
getBYCNumByMovetype(decode(dbflag,1,'BDB',rendertype),
movetype,outflag,storenum,STOREDATE,storeid,'2011-11-01','2011-11-21',
2) ycnum,
getBYCNumByMovetype(decode(dbflag,1,'BDB',rendertype),
movetype,outflag,storesum,STOREDATE,storeid,'2011-11-01','2011-11-21',
2) ycsum,
getBLLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storenum,STOREDATE,'2011-11-01','2011-11-21',outflag,
2) qt2num,
getBLLNumPeriod(decode(dbflag,1,'BDB',rendertype),
storesum,STOREDATE,'2011-11-01','2011-11-21',outflag,
2) qt2sum,
getStoreNumPeriod(decode(dbflag,1,'BDB',rendertype),
movetype,storenum,outflag,STOREDATE,storeid,'2011-11-01','2011-11-21',
1) beginnum,
getStoreNumPeriod(decode(dbflag,1,'BDB',rendertype),
movetype,storesum,outflag,STOREDATE,storeid,'2011-11-01','2011-11-21',
1) beginsum,
getStoreNumPeriod(decode(dbflag,1,'BDB',rendertype),
movetype,storenum,outflag,STOREDATE,storeid,'2011-11-01','2011-11-21',
2) innum,
getStoreNumPeriod(decode(dbflag,1,'BDB',rendertype),
movetype,storesum,outflag,STOREDATE,storeid,'2011-11-01','2011-11-21',
2) insum,
getStoreNumPeriod(decode(dbflag,1,'BDB',rendertype),
movetype,storenum,outflag,STOREDATE,storeid,'2011-11-01','2011-11-21',
3) outnum,
getStoreNumPeriod(decode(dbflag,1,'BDB',rendertype),
movetype,storesum,outflag,STOREDATE,storeid,'2011-11-01','2011-11-21',
3) outsum,
getStoreNumPeriod(decode(dbflag,1,'BDB',rendertype),
movetype,storenum,outflag,STOREDATE,storeid,'2011-11-01','2011-11-21',
4) endnum,
getStoreNumPeriod(decode(dbflag,1,'BDB',rendertype),
movetype,storesum,outflag,STOREDATE,storeid,'2011-11-01','2011-11-21',
4) endsum
from bstorelist PARTITION(BSTORELIST_791) a
where 1 = 1
and ((a.status = 3 and a.gyinvalid = 1 and
a.rendertype = 'BGYLL') or
(a.status > 4 and a.rendertype <> 'BYK') or
(a.status > 4 and a.rendertype = 'BYK' and
a.outflag = 1) or
(a.status > 5 and a.rendertype = 'BYK' and
a.outflag = 0))
and a.storeid in (select storeid
from sstore
where STORETYPEID <> 10004
and FINAAREACODE = 791))
group by materialcode,price
order by materialcode,price)
where (beginnum <> 0 or innum <> 0 or insum <> 0 or outnum <> 0 or outsum <> 0 or endsum <> 0 or dcnum <> 0 or llnum <> 0 or ycnum <> 0);

执行耗时及计划
4056 rows selected.
Elapsed: 00:03:03.13
Execution Plan
----------------------------------------------------------
Plan hash value: 1182253076
----------------------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name       | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |            | 32449 |    13M|       |  9090   (2)| 00:01:50 |       |       |
|   1 |  VIEW                     |            | 32449 |    13M|       |  9090   (2)| 00:01:50 |       |       |
|*  2 |   FILTER                  |            |       |       |       |            |          |       |       |
|   3 |    SORT GROUP BY          |            | 32449 |  2535K|    12M|  9090   (2)| 00:01:50 |       |       |
|*  4 |     HASH JOIN             |            | 87757 |  6856K|       |  8121   (2)| 00:01:38 |       |       |
|   5 |      SORT UNIQUE          |            |   324 |  4860 |       |    22   (0)| 00:00:01 |       |       |
|*  6 |       TABLE ACCESS FULL   | SSTORE     |   324 |  4860 |       |    22   (0)| 00:00:01 |       |       |
|   7 |      PARTITION LIST SINGLE|            |   339K|    21M|       |  8095   (2)| 00:01:38 |   KEY |   KEY |
|*  8 |       TABLE ACCESS FULL   | BSTORELIST |   339K|    21M|       |  8095   (2)| 00:01:38 |     2 |     2 |
----------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - filter(SUM("GETSTORENUMPERIOD"(DECODE("DBFLAG",1,'BDB',"RENDERTYPE"),"MOVETYPE","STORENUM","OUTFL
              AG","STOREDATE","STOREID",'2011-11-01','2011-11-21',1))<>0 OR
              SUM("GETSTORENUMPERIOD"(DECODE("DBFLAG",1,'BDB',"RENDERTYPE"),"MOVETYPE","STORENUM","OUTFLAG","STOREDATE
              ","STOREID",'2011-11-01','2011-11-21',2))<>0 OR SUM("GETSTORENUMPERIOD"(DECODE("DBFLAG",1,'BDB',"RENDERT
              YPE"),"MOVETYPE","STORESUM","OUTFLAG","STOREDATE","STOREID",'2011-11-01','2011-11-21',2))<>0 OR
              SUM("GETSTORENUMPERIOD"(DECODE("DBFLAG",1,'BDB',"RENDERTYPE"),"MOVETYPE","STORENUM","OUTFLAG","STOREDATE
              ","STOREID",'2011-11-01','2011-11-21',3))<>0 OR SUM("GETSTORENUMPERIOD"(DECODE("DBFLAG",1,'BDB',"RENDERT
              YPE"),"MOVETYPE","STORESUM","OUTFLAG","STOREDATE","STOREID",'2011-11-01','2011-11-21',3))<>0 OR
              SUM("GETSTORENUMPERIOD"(DECODE("DBFLAG",1,'BDB',"RENDERTYPE"),"MOVETYPE","STORESUM","OUTFLAG","STOREDATE
              ","STOREID",'2011-11-01','2011-11-21',4))<>0 OR SUM("GETBDCNUMPERIOD"(DECODE("DBFLAG",1,'BDB',"RENDERTYP
              E"),"STORENUM","STOREDATE",'2011-11-01','2011-11-21',"OUTFLAG",1))<>0 OR
              SUM("GETBLLNUMPERIOD"(DECODE("DBFLAG",1,'BDB',"RENDERTYPE"),"STORENUM","STOREDATE",'2011-11-01','2011-11
              -21',"OUTFLAG",1))<>0 OR SUM("GETBYCNUMBYMOVETYPE"(DECODE("DBFLAG",1,'BDB',"RENDERTYPE"),"MOVETYPE","OUT
              FLAG","STORENUM","STOREDATE","STOREID",'2011-11-01','2011-11-21',2))<>0)
   4 - access("A"."STOREID"="STOREID")
   6 - filter("FINAAREACODE"=791 AND "STORETYPEID"<>10004)
   8 - filter("A"."RENDERTYPE"<>'BYK' AND "A"."STATUS">4 OR "A"."RENDERTYPE"='BYK' AND "A"."OUTFLAG"=1
              AND "A"."STATUS">4 OR "A"."RENDERTYPE"='BYK' AND "A"."OUTFLAG"=0 AND "A"."STATUS">5 OR
              "A"."GYINVALID"=1 AND "A"."RENDERTYPE"='BGYLL' AND "A"."STATUS"=3)
Note
-----
   - 'PLAN_TABLE' is old version

Statistics
----------------------------------------------------------
        363  recursive calls
          0  db block gets
      36778  consistent gets
          0  physical reads
          0  redo size
     233446  bytes sent via SQL*Net to client
       6816  bytes received via SQL*Net from client
        272  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
       4056  rows processed


论坛徽章:
5
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51数据库板块每日发贴之星
日期:2011-07-22 01:01:02蜘蛛蛋
日期:2011-08-24 14:10:13ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:54:26
发表于 2011-11-24 17:56 | 显示全部楼层
So easy.

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2011-11-24 17:58 | 显示全部楼层
lbs1988 发表于 2011-11-24 17:56
So easy.

请问如何处理?谢谢!!!

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2011-11-24 18:53 | 显示全部楼层
有好心人能帮帮我不?在线等,谢谢!

使用道具 举报

回复
论坛徽章:
9
蛋疼蛋
日期:2011-10-18 11:00:17ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51蜘蛛蛋
日期:2011-11-09 13:48:06迷宫蛋
日期:2011-11-24 10:38:342012新春纪念徽章
日期:2012-01-04 11:56:44蜘蛛蛋
日期:2013-07-12 21:52:36凯迪拉克
日期:2013-12-12 09:53:072014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08
发表于 2011-11-24 19:31 | 显示全部楼层
2楼已经有解了,lz 一元一行,数好吧...

使用道具 举报

回复
论坛徽章:
3
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:542013年新春福章
日期:2013-02-25 14:51:24
发表于 2011-11-24 22:05 | 显示全部楼层
storeid 是否有索引,过滤性怎样,可以考虑加索引,在子查询加个hint 看看/*+unnest*/

使用道具 举报

回复
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2011-11-25 09:02 | 显示全部楼层
10046看看,时间花在哪了,看下面的信息,时间可能大部分花在函数的调用上了

使用道具 举报

回复
论坛徽章:
0
发表于 2011-11-25 09:31 | 显示全部楼层
|*  8 |       TABLE ACCESS FULL   | BSTORELIST |   339K|    21M|       |  8095   (2)| 00:01:38 |     2 |     2 |

看看表BSTORELIST的索引

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
32
生肖徽章2007版:狗
日期:2009-07-20 17:10:18茶鸡蛋
日期:2013-05-23 16:34:43茶鸡蛋
日期:2013-07-19 14:39:22ITPUB社区千里马徽章
日期:2013-08-22 09:58:03雪铁龙
日期:2013-08-23 13:04:11林肯
日期:2013-09-04 14:07:20兰博基尼
日期:2013-09-16 13:45:20马上有钱
日期:2014-05-14 14:07:392014年世界杯参赛球队: 波黑
日期:2014-07-03 13:24:39马上有对象
日期:2014-10-30 14:04:32
发表于 2011-11-25 10:56 | 显示全部楼层
SSTORE,BSTORELIST这两张表的行数是否很多?根据执行计划的输出可以考虑在FINAAREACODE列创建索引,访问SSTORE表走索引扫描。另可以考虑在status,rendertype,outflag等列创建复合索引,访问表bstorelist走单分区内的索引扫描。效率可能会提高一些。不过你的SQL语句中有很多函数调用,具体的函数实现不知道是否很复杂,如果很复杂这也会占用很大一部分时间的。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2011-11-25 11:00 | 显示全部楼层
SQL> select INDEX_NAME,TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME from user_indexes where TABLE_NAME like 'BSTORELIST';

INDEX_NAME                     TABLE_OWNER                    TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------
I_BSTORELIST_MATERIALID        MATERIAL_JX                    BSTORELIST                     PROJECT_JX
I_BSTORELIST_ORGBILLNO         MATERIAL_JX                    BSTORELIST                     PROJECT_JX
I_BSTORELIST_ACCDATE           MATERIAL_JX                    BSTORELIST                     PROJECT_JX
I_BSTORELIST_BILLID            MATERIAL_JX                    BSTORELIST                     PROJECT_JX
I_BSTORELIST_ITEMCODE          MATERIAL_JX                    BSTORELIST                     PROJECT_JX
I_BSTORELIST_MATERIALCODE      MATERIAL_JX                    BSTORELIST                     PROJECT_JX
I_BSTORELIST_M_SUBJECTID       MATERIAL_JX                    BSTORELIST                     PROJECT_JX
I_BSTORELIST_ORGBILLID         MATERIAL_JX                    BSTORELIST                     PROJECT_JX
I_BSTORELIST_STOREID           MATERIAL_JX                    BSTORELIST                     PROJECT_JX
SYS_C004972                    MATERIAL_JX                    BSTORELIST                     PROJECT_JX
SYS_C009333                    MATERIAL_JX                    BSTORELIST                     PROJECT_JX

11 rows selected.

使用道具 举报

回复

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

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表