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);

update 改写 merge into的更多相关文章

  1. Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 引自http://www.blogjava.net/TiGERTiAN/archive/2008/10/25/236519.html

    Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...

  2. hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等

    hibernate的保存hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别:一.预备知识:在所有之前,说明一下,对于hibernate,它的对象有三种状态,t ...

  3. Hibernate各保存方法之间的差 (save,persist,update,saveOrUpdte,merge,flush,lock)等一下

    hibernate保存  hibernate要保存的目的是提供一个方法,多.它们之间有许多不同之处,点击此处详细说明.使得差: 一.预赛: 在所有.阐释.供hibernate,,transient.p ...

  4. Hibernate update 和 merge 、saveOrUpdate的区别

    this.getSession().update(obj); this.getSession().merge(obj); this.getSession().saveOrUpdate(obj); 1. ...

  5. Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用

    Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...

  6. 【转】NHIBERNATE的各种保存方式的区别 (SAVE,PERSIST,UPDATE,SAVEORUPDTE,MERGE,FLUSH,LOCK)

    前言 今天学学习NH这个框架,在新增对象的时候,看见大神用了persist而没有用Save,心中比较疑惑,查阅资料的时候,发现这篇写的非常不错,转载供大家参考. hibernate的保存hiberna ...

  7. hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)

    hibernate的保存hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别:一.预备知识:在所有之前,说明一下,对于hibernate,它的对象有三种状态,t ...

  8. Oracle doesn't have on duplicate key update Use MERGE instead:

    Oracle doesn't have on duplicate key update Use MERGE instead: MERGE INTO my_table trg USING (SELECT ...

  9. hibernate的update、merge和saveOrUpdate的区别(转)

    1.首先 saveOrUpdate返回void 也就是什么都不返回 而merge会返回一个对象 2.其次 saveOrUpdate的做法是:自动判断该对象是否曾经持久化过,如果曾持久化过则使用upda ...

随机推荐

  1. 手势识别官方教程(3)识别移动手势(识别速度用VelocityTracker)

    moving手势在onTouchEvent()或onTouch()中就可识别,编程时主要是识别积云的速度用VelocityTracker等, Tracking Movement This lesson ...

  2. poj3140Contestants Division

    链接 这叫树形DP吗..?断开某条边 求剩下两颗树数权值和的差最小 dfs一遍 枚举边 查了n久 wa n次  dp数组没初始化.. 在poj上1A感觉应该挺爽 #include <iostre ...

  3. CSS——LESS

    去年就初次接触了LESS,并用他制作了一个Less.org的首页页面,但由于CSS的固有模式,没有让自己喜欢上他.由于前段时间学习bootstrap from twitter再次让我接触了这个Less ...

  4. zoj 1033 与其说是搜索,不如说是枚举

    zoj 与其说是搜索,不如说是枚举,只不过是通过搜索来实现的罢了. 主要是要注意好闰年的判断,特别是要注意好一串数字的划分. 题意其实我也看了一个晚上,才渐渐的看懂. 题意: 给你一个字符串,其中包含 ...

  5. Android与PHP服务器交互

    转自:http://blog.csdn.net/ab_ba/article/details/7912424 服务器端:server.php 1 <?php 2         include(' ...

  6. lua与C/C++交互

    Lua设计小巧很容易与C/C++进行交互,下面我们具体讲解C/C++中如何调用lua,而lua中又如何调用C代码. 首先lua和C交互的一个重要的数据结构lua_State,它是进行数据交换的堆栈,按 ...

  7. 如何在小方框上打对号 小方框内打对勾 word 方框打对勾

      在word中做选择时,很多人遇到需要在小方框上打对勾而不知如何做,现将可行的各种方法总结如下: 1:直接找到一个做好的,保存为图片,在需要的时候插入它: 2:插入文本框,然后边框选择为实线,在文本 ...

  8. Create Dynamic Modal Dialog Form in AdminLTE Bootstrap template

    原文地址 Create modal dialog form in jquery using bootstrap framework, slightly different from the usual ...

  9. c++11 lambda递归调用写法

    偶然想到要在函数内部使用lambda递归调用,以下是可行的写法,可参考 std::function<void(Node * container,const BlendFunc &blen ...

  10. 关于iTerm和Zsh

    关于iTerm和Zsh 终于我还是踏入了Zsh的行列,时间有点紧张,要开始做毕设了,关于Zsh和iTerm的好处我就不多说了哈,以后有时间再聊哈 Installation install Zsh 使用 ...