update 改写 merge into
update語句改寫成merge into有時會提高運行速度
看兩個案例
1.根據業務將兩個嵌套子查詢改寫成max,速度有3min提升到3s
UPDATE OPER_792.LL_SCB_YDKB_20120730 A
SET A.DCP =
(SELECT B.PROD_OFFER_NAME
FROM OPER_792.YD_TC B
WHERE A.SERV_ID = B.SERV_ID
AND B.TC_TYPE = '合約計劃'
AND ROWNUM = 1),
A.JCTC =
(SELECT B.PROD_OFFER_NAME
FROM OPER_792.YD_TC B
WHERE A.SERV_ID = B.SERV_ID
AND B.TC_TYPE = '基礎套餐'
AND ROWNUM = 1)
WHERE A.DAY_ID = 20150125
merge into OPER_792.LL_SCB_YDKB_20120730 A
using (select c.SERV_ID,
max(case
when c.TC_TYPE = '合約計劃' then
c.PROD_OFFER_NAME
end) col1,
max(case
when c.TC_TYPE = '基礎套餐' then
c.PROD_OFFER_NAME
end) col2
from OPER_792.YD_TC c
group by c.SERV_ID) b
on (A.SERV_ID = B.SERV_ID and a.day_id = 20150125)
when matched then
update set A.DCP = b.col1, A.JCTC = b.col2
?
2.正常的將update 改寫成merge into
update tb_result r set r.vote_count=nvl((
select temp_.vote_count
from(
select result_id,
count(rv_id) as vote_count
from tb_result_vote
group by result_id
) temp_
where temp_.result_id=r.result_id),
r.vote_count
);
?
merge into tb_result r
using(
select result_id,
count(rv_id) as vote_count
from tb_result_vote
group by result_id) temp_
on(temp_.result_id=r.result_id)
when matched then
update set r.vote_count=nvl(temp_.vote_count,r.vote_count);
轉載于:https://www.cnblogs.com/SUN-PH/p/4283247.html
總結
以上是生活随笔為你收集整理的update 改写 merge into的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux socket TIME_WA
- 下一篇: UIScrollView上面放一个UIS