记一次exists语句优化过程

我们经常会遇到带有exists这种形式的语句,官方描述如下,一般对应于子查询语句返回的布尔值:

 

在例子中可以看到:

SELECT department_id
  FROM departments d
  WHERE EXISTS
  (SELECT * FROM employees e
    WHERE d.department_id 
    = e.department_id)
   ORDER BY department_id;

 

 

 

 

 

 

 

 

原始sql如下:

UPDATE RICH_CUSTLOKPROFITNORMAL N
   SET N.FLAG = 1
 WHERE N.STATE = 1
   AND N.FLAG = 0
   AND EXISTS
 (SELECT 1
          FROM RICH_CUSTINTEREST         T,
               FINANCIAL_LOCKISSUEPROFIT F,
               FINANCIAL_ISSUE           I
         WHERE N.CUSTINTERESTID = T.ID
           AND T.ISSUEID = I.ISSUEID
           AND F.ISSUEID = I.ISSUEID
           AND N.ISSUEPROFITID = F.SERIALNO
           AND F.STATE = 1
           AND I.USEBENCHMARK = 0
           AND T.TYPE IN (0, 1)
           AND ((T.TYPE = 0 AND T.MATURITYDATE = :1 AND
               T.PAYDATE IS NOT NULL) OR (T.TYPE = 1 AND T.PAYDATE = :2))
           AND T.ISSUEID = :3)

由于sql语句为update语句,最终在生产环境改为如下方式:

select count(*) from  RICH_CUSTLOKPROFITNORMAL N
WHERE N.FLAG = 0
     and exists (select 1 
                 from FINANCIAL_LOCKISSUEPROFIT f
                 where f.ISSUEID=n.ISSUEID
                 and N.ISSUEPROFITID = F.SERIALNO
                 and f.state=1)

and exists
(select 1
          FROM RICH_CUSTINTEREST         T,
               FINANCIAL_ISSUE           I
         WHERE N.CUSTINTERESTID = T.ID
           AND T.ISSUEID = I.ISSUEID
           AND I.USEBENCHMARK = 0
           AND T.TYPE IN (0, 1)
           AND ((T.TYPE = 0 AND T.MATURITYDATE = to_date('20180813','yyyymmdd') AND
               T.PAYDATE IS NOT NULL) OR (T.TYPE = 1 AND T.PAYDATE = to_date('20180813','yyyymmdd')))
           AND T.ISSUEID = 'AMHQRH63DGC')
and n.state=1;

 

转载于:https://www.cnblogs.com/dayu-liu/p/9470796.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值