暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【索引系列】走在专家的路上,每天一条SQL优化(5)

数据和云 2017-09-22
207

SQL文本:

SELECT *

  FROM(SELECT PAGE.*, ROWNUM PAGEROWNUM

         FROM (SELECT CLASS1,

                       CLASS2,

                       SPBM,

                       CLASS3,

                       MFLC,

                       MFSWFZR,

                       SUM(BQSR) BQSR,

                       SUM(BQML) BQML,

                       SUM(DBQSR) DBQSR,

                       SUM(DBQML) DBQML,

                       SUM(TQSR) TQSR,

                       SUM(TQML) TQML,

                       SUM(HBSR) HBSR,

                       SUM(HBML) HBML

                 FROM (SELECT *+ RULE +*/

                         CLASS1,

                         CLASS2,

                         SPBM,

                         CLASS3,

                         MFLC,

                         MFSWFZR,

                         SUM(SGLXSSR -(SGLGCERT - NVL(SGLN25, 0)) -

                             NVL(SGLN25, 0) +NVL(SGLN24, 0) + NVL(SGLN22, 0) +

                             NVL(SGLN23, 0) +NVL(SGLN21, 0) + NVL(SGLN20, 0)) BQSR,

                         SUM(SGLN2 - (SGLGCERT- NVL(SGLN25, 0)) -

                             NVL(SGLN25, 0) +NVL(SGLN24, 0) + NVL(SGLN22, 0) +

                             NVL(SGLN23, 0) +NVL(SGLN21, 0) + NVL(SGLN20, 0)) BQML,

                         0.00 DBQSR,

                         0.00 DBQML,

                         0.00 TQSR,

                         0.00 TQML,

                         0.00 HBSR,

                         0.00 HBML

                          FROM SALEGOODSLIST,VIEW_MFRAME_ALL, MANAFRAME

                         WHERE SGLMFID = CLASS3

                           AND SGLMFID = MFCODE

                           AND SGLHSRQ >=TO_DATE('2017-01-01', 'YYYY-MM-DD')

                          AND SGLHSRQ <

                              TO_DATE('2017-04-11', 'YYYY-MM-DD') + 1

                           AND SGLWMID LIKENVL('', '%')

                           AND CLASS1 LIKENVL('2007', '%')

                           AND CLASS2 LIKE NVL('200709','%')

                           AND SPBM LIKENVL('20070901', '%')

                           AND CLASS3 LIKENVL('', '%')

                           AND 'MFLC' = 'MFLC'

                         GROUP BY CLASS1,CLASS2, SPBM, CLASS3, MFLC, MFSWFZR

                        UNION

                        SELECT *+ RULE +*/

                         CLASS1,

                         CLASS2,

                         SPBM,

                         CLASS3,

                         MFLC,

                         MFSWFZR,

                         0.00 BQSR,

                         0.00 BQML,

                         SUM(SGLXSSR -(SGLGCERT - NVL(SGLN25, 0)) -

                             NVL(SGLN25, 0) +NVL(SGLN24, 0) + NVL(SGLN22, 0) +

                             NVL(SGLN23, 0) +NVL(SGLN21, 0) + NVL(SGLN20, 0)) DBQSR,

                         SUM(SGLN2 - (SGLGCERT- NVL(SGLN25, 0)) -

                             NVL(SGLN25, 0) +NVL(SGLN24, 0) + NVL(SGLN22, 0) +

                             NVL(SGLN23, 0) + NVL(SGLN21, 0) +NVL(SGLN20, 0)) DBQML,

                         0.00 TQSR,

                         0.00 TQML,

                         0.00 HBSR,

                         0.00 HBML

                          FROM SALEGOODSLIST,VIEW_MFRAME_ALL, MANAFRAME

                         WHERE SGLMFID = CLASS3

                           AND SGLMFID = MFCODE

                           AND SGLHSRQ >=TO_DATE('2016-01-01', 'YYYY-MM-DD')

                           AND SGLHSRQ <

                              TO_DATE('2017-04-11','YYYY-MM-DD') + 1

                           AND SGLWMID LIKENVL('', '%')

                           AND SGLWMID LIKENVL('', '%')

                           AND CLASS1 LIKENVL('2007', '%')

                           AND CLASS2 LIKENVL('200709', '%')

                           AND SPBM LIKENVL('20070901', '%')

                           AND CLASS3 LIKENVL('', '%')

                           AND 'MFLC' = 'MFLC'

                         GROUP BY CLASS1,CLASS2, SPBM, CLASS3, MFLC, MFSWFZR

                        UNION

                        SELECT *+ RULE +*/

                         CLASS1,

                         CLASS2,

                         SPBM,

                         CLASS3,

                         MFLC,

                         MFSWFZR,

                         0.00 BQSR,

                         0.00 BQML,

                         0.00 DBQSR,

                         0.00 DBQML,

                         SUM(SGLXSSR -(SGLGCERT - NVL(SGLN25, 0)) -

                             NVL(SGLN25, 0) +NVL(SGLN24, 0) + NVL(SGLN22, 0) +

                             NVL(SGLN23, 0) +NVL(SGLN21, 0) + NVL(SGLN20, 0)) TQSR,

                         SUM(SGLN2 - (SGLGCERT- NVL(SGLN25, 0)) -

                             NVL(SGLN25, 0) +NVL(SGLN24, 0) + NVL(SGLN22, 0) +

                             NVL(SGLN23, 0) +NVL(SGLN21, 0) + NVL(SGLN20, 0)) TQML,

                         0.00 HBSR,

                         0.00 HBML

                          FROM SALEGOODSLIST,VIEW_MFRAME_ALL, MANAFRAME

                         WHERE SGLMFID = CLASS3

                           AND SGLMFID = MFCODE

                           AND SGLHSRQ >=

                              ADD_MONTHS(TO_DATE('2017-01-01', 'YYYY-MM-DD'),

                                         -12)

                           AND SGLHSRQ <

                              ADD_MONTHS(TO_DATE('2017-04-11', 'YYYY-MM-DD'),

                                          -12)+ 1

                           AND SGLWMID LIKENVL('', '%')

                           AND SGLWMID LIKENVL('', '%')

                           AND CLASS1 LIKENVL('2007', '%')

                           AND CLASS2 LIKENVL('200709', '%')

                           AND SPBM LIKENVL('20070901', '%')

                           AND CLASS3 LIKE NVL('', '%')

                           AND 'MFLC' = 'MFLC'

                         GROUP BY CLASS1,CLASS2, SPBM, CLASS3, MFLC, MFSWFZR

                        UNION

                        SELECT /*+ RULE +*/

                         CLASS1,

                         CLASS2,

                         SPBM,

                         CLASS3,

                         MFLC,

                         MFSWFZR,

                         0.00 BQSR,

                         0.00 BQML,

                         0.00 DBQSR,

                         0.00 DBQML,

                         0.00 TQSR,

                         0.00 TQML,

                         SUM(SGLXSSR -(SGLGCERT - NVL(SGLN25, 0)) -

                             NVL(SGLN25, 0) +NVL(SGLN24, 0) + NVL(SGLN22, 0) +

                             NVL(SGLN23, 0) +NVL(SGLN21, 0) + NVL(SGLN20, 0)) HBSR,

                         SUM(SGLN2 - (SGLGCERT- NVL(SGLN25, 0)) -

                             NVL(SGLN25, 0) +NVL(SGLN24, 0) + NVL(SGLN22, 0) +

                             NVL(SGLN23, 0) +NVL(SGLN21, 0) + NVL(SGLN20, 0)) HBML

                          FROM SALEGOODSLIST,VIEW_MFRAME_ALL, MANAFRAME

                         WHERE SGLMFID = CLASS3

                           AND SGLMFID = MFCODE

                           AND SGLHSRQ >=

                              ADD_MONTHS(TO_DATE('2017-01-01', 'YYYY-MM-DD'),

                                          -1)

                           AND SGLHSRQ <

                              ADD_MONTHS(TO_DATE('2017-04-11', 'YYYY-MM-DD'),

                                          -1) +1

                           AND SGLWMID LIKENVL('', '%')

                           AND SGLWMID LIKENVL('', '%')

                          AND CLASS1 LIKENVL('2007', '%')

                           AND CLASS2 LIKENVL('200709', '%')

                           AND SPBM LIKENVL('20070901', '%')

                           AND CLASS3 LIKENVL('', '%')

                           AND 'MFLC' = 'MFLC'

                         GROUP BY CLASS1,CLASS2, SPBM, CLASS3, MFLC, MFSWFZR)

                GROUP BY CLASS1, CLASS2, SPBM, CLASS3, MFLC, MFSWFZR) PAGE)

 WHERETRUNC((PAGEROWNUM - 1) / 10000) = 0

;

SQL执行的相关统计信息:

如上图所示,该SQL17天的采集时间内,共执行了1次,总执行时间为10,758(s),大概为2.9小时(h),逻辑读也很大,大概为422,788,870。可以进行优化。

优化前SQL的执行计划如下所示:

统计信息:

创建了如下索引:

CREATE INDEX DBUSRMKT.idx_SALEGOODSLIST_01 ONDBUSRMKT.SALEGOODSLIST(SGLMFID,SGLHSRQ,SGLWMID)ONLINE NOLOGGING PARALLEL 8;

 

ALTER INDEX DBUSRMKT.idx_SALEGOODSLIST_01NOPARALLEL;

优化后的执行计划如下:

统计信息:

优化后效果如下:

SQL ID

优化前

优化后

提高效果

执行时间

逻辑读

执行时间

逻辑读

执行时间

逻辑读

3q0mbn02zfg57

81.62秒(s)

3562062

1.48秒(s)

533221

55倍多

6倍多


文章转载自数据和云,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论