同事的sql跑了几个小时,不用看执行计划就能优化

今天同事说sql太慢

MERGE INTO FC_BQ_COSTRESULT_PRODUCT A
USING (SELECT SUBSTR(:B1, 1, 4) YEAR,
              SUBSTR(:B1, 5, 2) PERIOD,
              T1.PK_DEPTDOC,
              T1.ROOTDEPT,
              T2.ITEMCODE,
              T3.PRODUCTCODE,
              SUM(NVL(T1.CALMNY, 0)) INDIRITEMVALUE,
              (SELECT T.CURRENCY_CODE
                 FROM DWF_CURRENCY_MAPPING T
                WHERE T.PK_CURRTYPE = T1.PK_CURRTYPE) CURRENCY,
              (SELECT T.BLCODE
                 FROM FC_BUSINESSLINE T
                WHERE T.PK_BUSINESSLINE = T1.PK_BUSINESSLINE) BUSINESSLINE
         FROM FC_COSTGATHERRESULT_M T1
         JOIN FC_COSTITEMDEFINE T2 ON T1.PK_COSTITEM = T2.PK_COSTITEM
         JOIN FC_PRODUCTDOC T3 ON T1.PK_PRODUCTBALANCE = T3.PK_PRODUCTDOC
        WHERE T1.KJND = SUBSTR(:B1, 1, 4)
          AND T1.PK_DEPTDOC != T1.ROOTDEPT
          AND T1.KJQJ = SUBSTR(:B1, 5, 2)
          AND T1.PROD_TYPE = 'N'
          AND T1.PK_CALPROJECT = '00011R10000000SLNQZC'
          AND T1.PK_COSTITEM != '0001A6100000004YXF9W'
        GROUP BY T1.PK_DEPTDOC,
                 T1.ROOTDEPT,
                 T2.ITEMCODE,
                 T3.PRODUCTCODE,
                 T1.PK_CURRTYPE,
                 T1.PK_BUSINESSLINE) B
ON (B.ROOTDEPT = A.ROOTDEPT AND A.ITEMCODE = B.ITEMCODE AND A.DEPT = B.PK_DEPTDOC AND A.PRODUCTCODE = B.PRODUCTCODE AND A.CURRENCY = B.CURRENCY AND A.YEAR = B.YEAR AND A.PERIOD = B.PERIOD)
WHEN MATCHED THEN
  UPDATE
     SET A.INDIRITEMVALUE = B.INDIRITEMVALUE,
         A.ITEMVALUE      = A.ITEMVALUE + B.INDIRITEMVALUE
WHEN NOT MATCHED THEN
  INSERT
    (YEAR,
     PERIOD,
     DEPT,
     ROOTDEPT,
     ITEMCODE,
     PRODUCTCODE,
     ITEMVALUE,
     INDIRITEMVALUE,
     CURRENCY,
     DEF2)
  VALUES
    (B.YEAR,
     B.PERIOD,
     B.PK_DEPTDOC,
     B.ROOTDEPT,
     B.ITEMCODE,
     B.PRODUCTCODE,
     B.INDIRITEMVALUE,
     B.INDIRITEMVALUE,
     B.CURRENCY,

     B.BUSINESSLINE)


一看

 (SELECT T.CURRENCY_CODE
                 FROM DWF_CURRENCY_MAPPING T
                WHERE T.PK_CURRTYPE = T1.PK_CURRTYPE) CURRENCY,
              (SELECT T.BLCODE
                 FROM FC_BUSINESSLINE T
                WHERE T.PK_BUSINESSLINE = T1.PK_BUSINESSLINE) BUSINESSLINE


问题肯定出在此处

去掉标量,改成jion


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值