查看: 2192|回复: 9

关于一条SQL优化问题

[复制链接]
论坛徽章:
0
发表于 2009-12-18 14:05 | 显示全部楼层 |阅读模式
select
AA.ROW_WID,
AA.MEMBER_WID,
AA.SEQ_NUM,
AA.TIER_WID,
MAX(BB.SEQ_NUM) PREVIOUS_SEQ_NUM
from
(
SELECT
--STAGE.APPR_STAT_CD,
--PROCESSING_STAT_CD,
F.ROW_WID,
F.MEMBER_WID,
F.SEQ_NUM,
F.TIER_WID
FROM
WC_LOYMEMTIERCLASSSTATUS_FS STAGE,
WC_LOYMEMTIERCLASSSTATUS_F   F
WHERE
STAGE.APPR_STAT_CD  in(
'Automatic','活动','手动 - 已批准','Manual - Approved')
and  STAGE.PROCESSING_STAT_CD is null
and F.MEMBER_WID<>0
and STAGE.INTEGRATION_ID=F.INTEGRATION_ID
--order by F.MEMBER_WID,F.SEQ_NUM
)AA,

(
select  
--PROCESS.VAL,   
--APPROVE.VAL,
TIERCHANGE.MEMBER_WID,
TIERCHANGE.SEQ_NUM
          from
               W_LOV_D PROCESS ,
               W_LOV_D APPROVE ,
               WC_LOYMEMTIERCLASSSTATUS_F TIERCHANGE
          where  ( TIERCHANGE.APPR_STAT_CD_WID = APPROVE.ROW_WID
          and TIERCHANGE.PROCESSING_STAT_CD_WID = PROCESS.ROW_WID
          and PROCESS.R_TYPE = 'LOY_MEM_TIER_PROCESSING_STATUS' and APPROVE.R_TYPE = 'LOY_MEM_TIER_APPR_STATUS_CD'
          and PROCESS.VAL='Unspecified'and APPROVE.VAL in ('Manual - Approved','活动','Automatic')
          )
          and TIERCHANGE.MEMBER_WID<>0
--order by TIERCHANGE.MEMBER_WID,TIERCHANGE.SEQ_NUM
) BB
where AA.MEMBER_WID=BB.MEMBER_WID and AA.SEQ_NUM>BB.SEQ_NUM
group by AA.ROW_WID,AA.MEMBER_WID,AA.SEQ_NUM,AA.TIER_WID
order by AA.ROW_WID,AA.MEMBER_WID,AA.SEQ_NUM,AA.TIER_WID


单独执行AA,BB里面的内容都很快,2秒左右
整体执行非常慢,40分钟未出结果

执行计划:


何解??

SQL> select count(*) from w_lov_d;

  COUNT(*)
----------
     35600

SQL> select count(*) from wc_loymemtierclassstatus_f;

  COUNT(*)
----------
    511082

SQL> select count(*) from wc_loymemtierclassstatus_fs;

  COUNT(*)
----------
    511082

[ 本帖最后由 明不明白 于 2009-12-18 14:09 编辑 ]
论坛徽章:
27
参与WIN7挑战赛纪念
日期:2009-11-06 16:05:25ITPUB元老
日期:2011-04-23 17:54:35ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04奥迪
日期:2013-08-05 09:30:132015年新春福章
日期:2015-03-02 10:21:23弗兰奇
日期:2016-12-28 13:54:54
发表于 2009-12-18 14:10 | 显示全部楼层
看不到執行計劃。。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2009-12-18 14:11 | 显示全部楼层
原帖由 erpmeng 于 2009-12-18 14:10 发表
看不到執行計劃。。


刷新一下

使用道具 举报

回复
论坛徽章:
311
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2009-12-18 14:11 | 显示全部楼层

试试:

select /*+ no_merge(AA) no_merge(BB) */
AA.ROW_WID,
AA.MEMBER_WID,
AA.SEQ_NUM,
AA.TIER_WID,
MAX(BB.SEQ_NUM) PREVIOUS_SEQ_NUM
from
(
SELECT
--STAGE.APPR_STAT_CD,
--PROCESSING_STAT_CD,
F.ROW_WID,
F.MEMBER_WID,
F.SEQ_NUM,
F.TIER_WID
FROM
WC_LOYMEMTIERCLASSSTATUS_FS STAGE,
WC_LOYMEMTIERCLASSSTATUS_F   F
WHERE
STAGE.APPR_STAT_CD  in(
'Automatic','活动','手动 - 已批准','Manual - Approved')
and  STAGE.PROCESSING_STAT_CD is null
and F.MEMBER_WID<>0
and STAGE.INTEGRATION_ID=F.INTEGRATION_ID
--order by F.MEMBER_WID,F.SEQ_NUM
)AA,

(
select  
--PROCESS.VAL,   
--APPROVE.VAL,
TIERCHANGE.MEMBER_WID,
TIERCHANGE.SEQ_NUM
          from
               W_LOV_D PROCESS ,
               W_LOV_D APPROVE ,
               WC_LOYMEMTIERCLASSSTATUS_F TIERCHANGE
          where  ( TIERCHANGE.APPR_STAT_CD_WID = APPROVE.ROW_WID
          and TIERCHANGE.PROCESSING_STAT_CD_WID = PROCESS.ROW_WID
          and PROCESS.R_TYPE = 'LOY_MEM_TIER_PROCESSING_STATUS' and APPROVE.R_TYPE = 'LOY_MEM_TIER_APPR_STATUS_CD'
          and PROCESS.VAL='Unspecified'and APPROVE.VAL in ('Manual - Approved','活动','Automatic')
          )
          and TIERCHANGE.MEMBER_WID<>0
--order by TIERCHANGE.MEMBER_WID,TIERCHANGE.SEQ_NUM
) BB
where AA.MEMBER_WID=BB.MEMBER_WID and AA.SEQ_NUM>BB.SEQ_NUM
group by AA.ROW_WID,AA.MEMBER_WID,AA.SEQ_NUM,AA.TIER_WID
order by AA.ROW_WID,AA.MEMBER_WID,AA.SEQ_NUM,AA.TIER_WID

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2009-12-18 14:12 | 显示全部楼层
点击图片,能看到执行计划

使用道具 举报

回复
论坛徽章:
120
现任管理团队成员
日期:2011-05-07 01:45:08乌索普
日期:2019-02-14 23:54:04
发表于 2009-12-18 14:12 | 显示全部楼层
由执行计划么?

/*+ NO_MERGE(a) NO_MERGE(b) */

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2009-12-18 14:20 | 显示全部楼层
原帖由 ZALBB 于 2009-12-18 14:11 发表
select /*+ no_merge(AA) no_merge(BB) */
AA.ROW_WID,
AA.MEMBER_WID,
AA.SEQ_NUM,
AA.TIER_WID,
MAX(BB.SEQ_NUM) PREVIOUS_SEQ_NUM
from
(
SELECT
--STAGE.APPR_STAT_CD,
--PROCESSING_STAT_CD,
F.ROW_WID,
F.MEMBER_WID,
F.SEQ_NUM,
F.TIER_WID
FROM
WC_LOYMEMTIERCLASSSTATUS_FS STAGE,
WC_LOYMEMTIERCLASSSTATUS_F   F
WHERE
STAGE.APPR_STAT_CD  in(
'Automatic','活动','手动 - 已批准','Manual - Approved')
and  STAGE.PROCESSING_STAT_CD is null
and F.MEMBER_WID0
and STAGE.INTEGRATION_ID=F.INTEGRATION_ID
--order by F.MEMBER_WID,F.SEQ_NUM
)AA,

(
select  
--PROCESS.VAL,   
--APPROVE.VAL,
TIERCHANGE.MEMBER_WID,
TIERCHANGE.SEQ_NUM
          from
               W_LOV_D PROCESS ,
               W_LOV_D APPROVE ,
               WC_LOYMEMTIERCLASSSTATUS_F TIERCHANGE
          where  ( TIERCHANGE.APPR_STAT_CD_WID = APPROVE.ROW_WID
          and TIERCHANGE.PROCESSING_STAT_CD_WID = PROCESS.ROW_WID
          and PROCESS.R_TYPE = 'LOY_MEM_TIER_PROCESSING_STATUS' and APPROVE.R_TYPE = 'LOY_MEM_TIER_APPR_STATUS_CD'
          and PROCESS.VAL='Unspecified'and APPROVE.VAL in ('Manual - Approved','活动','Automatic')
          )
          and TIERCHANGE.MEMBER_WID0
--order by TIERCHANGE.MEMBER_WID,TIERCHANGE.SEQ_NUM
) BB
where AA.MEMBER_WID=BB.MEMBER_WID and AA.SEQ_NUM>BB.SEQ_NUM
group by AA.ROW_WID,AA.MEMBER_WID,AA.SEQ_NUM,AA.TIER_WID
order by AA.ROW_WID,AA.MEMBER_WID,AA.SEQ_NUM,AA.TIER_WID



  速度有了大幅度提升,但是仍然需要140s

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2009-12-18 14:20 | 显示全部楼层
原帖由 zergduan 于 2009-12-18 14:12 发表
由执行计划么?

/*+ NO_MERGE(a) NO_MERGE(b) */


时间减少到140秒

使用道具 举报

回复
论坛徽章:
311
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2009-12-18 14:21 | 显示全部楼层

回复 #7 明不明白 的帖子

作个10046,看看时间耗在哪。
alter session set events '10046 trace name context forever, level 12';
sql
alter session set events '10046 trace name context off';

把TRACE文件贴上来。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2009-12-18 14:29 | 显示全部楼层
原帖由 ZALBB 于 2009-12-18 14:21 发表
作个10046,看看时间耗在哪。
alter session set events '10046 trace name context forever, level 12';
sql
alter session set events '10046 trace name context off';

把TRACE文件贴上来。



没权限等服务器,抓不到trace

使用道具 举报

回复

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

本版积分规则 发表回复

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号
  
快速回复 返回顶部 返回列表