首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle性能调优

Oracle性能调优
EN

Stack Overflow用户
提问于 2016-03-10 22:41:23
回答 2查看 381关注 0票数 0

我有下面的甲骨文查询。它需要很长时间才能运行。您能为这个查询提供一些性能调优建议吗?

代码语言:javascript
复制
select ss.registration_id as REGISTRATION_ID,
       ss.batch_id as BATCH_ID
  from submtd_srvc PARTITION(SUBMTD_SRVC_821370) ss,
       (select a.exceptn_criteria_val,
               a.exceptn_criteria_rtrn_val 
          from EXCEPTN_CRITERIA a,
               EXCEPTN_EXPRESSION b
          where a.EXCEPTN_EXPRESSION_ID = b.EXCEPTN_EXPRESSION_ID
            and b.EXCEPTN_EXPRESSION_NAME = 'NC_CUSTOM_REV_CAT'
            and b.IS_CURRENT_INDCTR = 1
            and a.IS_CURRENT_INDCTR = 1) sub_query
  where ss.REVENUE_CD = sub_query.exceptn_criteria_val
    and ss.batch_id =  821370
    and exists (select 'x'
                  from submtd_srvc PARTITION(SUBMTD_SRVC_821370) ss2,
                       (select a.exceptn_criteria_val,
                               a.exceptn_criteria_rtrn_val 
                          from EXCEPTN_CRITERIA a,
                               EXCEPTN_EXPRESSION b
                          where a.EXCEPTN_EXPRESSION_ID = b.EXCEPTN_EXPRESSION_ID
                            and b.EXCEPTN_EXPRESSION_NAME = 'NC_CUSTOM_REV_CAT'
                            and b.IS_CURRENT_INDCTR = 1
                            and a.IS_CURRENT_INDCTR = 1) sub_query2
                  where ss2.REVENUE_CD = sub_query2.exceptn_criteria_val
                    and ss2.registration_id = ss.registration_id
                    and ss2.batch_id = ss.batch_id
                    and ss2.batch_id = 821370
                    and sub_query2.exceptn_criteria_rtrn_val <> sub_query.exceptn_criteria_rtrn_val)
  Order By Ss.Registration_Id,
           ss.batch_id;
EN

回答 2

Stack Overflow用户

发布于 2016-03-10 22:56:58

如果我理解正确的话,您可以使用相关子查询来查找具有多个不同exceptn_criteria_rtrn_val值的行。如果我是对的,最好使用解析函数:

代码语言:javascript
复制
select vw.registration_id as REGISTRATION_ID, vw.batch_id as BATCH_ID
from
 (select ss.registration_id as REGISTRATION_ID, ss.batch_id as BATCH_ID
        ,count(distinct sub_query.exceptn_criteria_rtrn_val) over(partition by ss.registration_id, ss.batch_id) as cnt
    from submtd_srvc PARTITION(SUBMTD_SRVC_821370) ss,
         (select a.exceptn_criteria_val, a.exceptn_criteria_rtrn_val
            from EXCEPTN_CRITERIA a, EXCEPTN_EXPRESSION b
           where a.EXCEPTN_EXPRESSION_ID = b.EXCEPTN_EXPRESSION_ID
             and b.EXCEPTN_EXPRESSION_NAME = 'NC_CUSTOM_REV_CAT'
             and b.IS_CURRENT_INDCTR = 1
             and a.IS_CURRENT_INDCTR = 1) sub_query
   where ss.REVENUE_CD = sub_query.exceptn_criteria_val
     and ss.batch_id = 821370) vw
where cnt > 1
Order By vw.Registration_Id, vw.batch_id;
票数 2
EN

Stack Overflow用户

发布于 2016-03-10 23:14:08

您可以将EXISTS替换为GROUP BYHAVING

代码语言:javascript
复制
SELECT ss.registration_id,
       ss.batch_id
FROM   submtd_srvc PARTITION(SUBMTD_SRVC_821370) ss
       INNER JOIN
       EXCEPTN_CRITERIA a
       ON ( ss.REVENUE_CD = a.exceptn_criteria_val )
       INNER JOIN
       EXCEPTN_EXPRESSION b
       ON ( a.EXCEPTN_EXPRESSION_ID = b.EXCEPTN_EXPRESSION_ID )
WHERE  b.EXCEPTN_EXPRESSION_NAME = 'NC_CUSTOM_REV_CAT'
AND    b.IS_CURRENT_INDCTR = 1
AND    a.IS_CURRENT_INDCTR = 1
AND    ss.batch_id =  821370
GROUP BY
       ss.Registration_Id,
       ss.batch_id
HAVING COUNT( DISTINCT a.exceptn_criteria_rtrn_val ) = 1
ORDER BY
       ss.Registration_Id,
       ss.batch_id;

我还去掉了所有子查询,使用了ANSI标准连接,而不是遗留的Oracle连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35919543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档