哪位童鞋帮忙看看这个查询该怎么优化. 多谢

[复制链接]
查看11 | 回复9 | 2009-7-22 09:30:00 | 显示全部楼层 |阅读模式
这里CNR.TB_CNR021_FCT_CNCSSN.MNTH_IN_USE_NUM是个大表, 有近600万行. 其他的表都不算大.
SELECT
CNR.TB_CNR011_DIM_PROD_FMLY.PROD_GRP_DISP_NAM,
CNR.TB_CNR021_FCT_CNCSSN.MNTH_IN_USE_NUM,
sum(CNR.TB_CNR021_FCT_CNCSSN.NET_CNCSSN_AMT),
CNR.TB_CNR011_DIM_PROD_FMLY.PROD_LN_CD,
CNR.TB_CNR011_DIM_PROD_FMLY.MFG_SITE_NAM,
CNR.TB_CNR011_DIM_PROD_FMLY.PROD_FMLY_NAM,
CNR.TB_CNR014_DIM_BRAND.BRAND_CD,
CNR.TB_CNR014_DIM_BRAND.BRAND_NAM,
CNR.TB_CNR013_DIM_WRNT_STS.WRNT_STS_CD,
CNR.TB_CNR015_DIM_CNCSSN_CTGY.CNCSSN_CTGY_CD,
CU.TB_COM02111_DIM_TIME.FISCAL_YEAR_WEEK_YYYYWW,
CNR.TB_CNR011_DIM_PROD_FMLY.PROD_GRP_NAM
FROM
CNR.TB_CNR011_DIM_PROD_FMLY,
CNR.TB_CNR021_FCT_CNCSSN,
CNR.TB_CNR014_DIM_BRAND,
CNR.TB_CNR013_DIM_WRNT_STS,
CNR.TB_CNR015_DIM_CNCSSN_CTGY,
CU.TB_COM02111_DIM_TIME
WHERE
( CNR.TB_CNR011_DIM_PROD_FMLY.PROD_FMLY_ID=CNR.TB_CNR021_FCT_CNCSSN.PROD_FMLY_ID)
AND( CNR.TB_CNR014_DIM_BRAND.BRAND_ID=CNR.TB_CNR021_FCT_CNCSSN.BRAND_ID)
AND( CNR.TB_CNR021_FCT_CNCSSN.WRNT_STS_ID=CNR.TB_CNR013_DIM_WRNT_STS.WRNT_STS_ID)
AND( CNR.TB_CNR021_FCT_CNCSSN.CNCSSN_CTGY_ID=CNR.TB_CNR015_DIM_CNCSSN_CTGY.CNCSSN_CTGY_ID)
AND( CNR.TB_CNR021_FCT_CNCSSN.RPT_ID = (select wkly_rpt_id from cnr.tb_cnr005_rep_ctrl))
AND( CNR.TB_CNR021_FCT_CNCSSN.CALENDAR_DT=CU.TB_COM02111_DIM_TIME.CALENDAR_DT)
AND( CNR.TB_CNR021_FCT_CNCSSN.CNCSSN_UNV_FLG='Y')
AND
CU.TB_COM02111_DIM_TIME.FISCAL_YEAR_WEEK_YYYYWW>200901AND
CU.TB_COM02111_DIM_TIME.FISCAL_YEAR_WEEK_YYYYWW=200901 AND

"TB_COM02111_DIM_TIME"."FISCAL_YEAR_WEEK_YYYYWW"<=200929)
11 - filter("TB_CNR021_FCT_CNCSSN"."CNCSSN_UNV_FLG"='Y' AND "TB_CNR021_FCT_CNCSSN"."RPT_ID"= (SELECT /*+ */

"TB_CNR005_REP_CTRL"."WKLY_RPT_ID" FROM "CNR"."TB_CNR005_REP_CTRL" "TB_CNR005_REP_CTRL"))
14 - access("TB_CNR021_FCT_CNCSSN"."WRNT_STS_ID"="TB_CNR013_DIM_WRNT_STS"."WRNT_STS_ID")

Note: cpu costing is off

36 rows selected.
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
收集相关表和索引的统计信息试试
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
看不出很慢
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
数据库哪个版本
感觉sort group by那有问题
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
感觉只能在索引和统计信息收集上下功夫了
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
数据库版本信息补上来;
对着关联字段查看你的索引情况,没有的和开发人员确认下补上;
如果情况紧急可先对表进行分析再看看;
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
建议
1. 先收集每个QUERY object的统计信息;
2. 对CNR.TB_CNR021_FCT_CNCSSN.MNTH_IN_USE_NUM加并行和full,
/*+ full(CNR.TB_CNR021_FCT_CNCSSN.MNTH_IN_USE_NUM) parallel (CNR.TB_CNR021_FCT_CNCSSN.MNTH_IN_USE_NUM 8)*/.
3. 察看sort area size, 如果可能,增大它; 如果是10g的话,可以试一下HASH GROUPBY .
4. 如果表的数据变化不大,使用物化视图。
[ 本帖最后由 kl911 于 2009-8-12 23:18 编辑 ]
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
分析表,看看
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
多谢各位. 数据库是9206, 统计信息也是最新的. sort_area_size=10238976. 小了点? 但是这是其他DBA以前设好的, 没充分理由一般不动. 物化视图也是我考虑之一, 但是程序员说不行.



回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
该语句是运用在OLTP还是OLAP?
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行