oracle merge 效率慢,更新语句的效率比较(merge into )

昨晚更新了一批数据,用update的老办法耗时20多分,而用 merge into 不到2秒结束,效率真是天壤之别。具体见下:

用T_TMP_SCHOOL(135868行)的BIRTH 字段更新T_TMP_NT_CUSTOMERDETAIL( 763119行) 的BIRTHDATE 字段,连接条件 T_TMP_SCHOOL.ID = t_tmp_nt_customerdetail.SCHOOLID

--表结构

create table T_TMP_NT_CUSTOMERDETAIL

(

CUSTOMERID         VARCHAR2(15) not null,

DOCCATEGORY        VARCHAR2(2) not null,

DOCNUMBER          VARCHAR2(20) not null,

BIRTHDATE          VARCHAR2(8),

...........

SCHOOLID           VARCHAR2(60)

);

create table T_TMP_SCHOOL

(

ID      VARCHAR2(20),

COMPANY VARCHAR2(100),

NAME    VARCHAR2(20),

BIRTH   VARCHAR2(20)

);

--两个表的数据见下:

select count(1) from t_tmp_nt_customerdetail t;  --763119

select count(1) from  t_tmp_school;              --135868

--为了验证结果,测试前先清空birthdate的值,共更改 135879 行

update  t_tmp_nt_customerdetail t

set t.birthdate = null

where t.schoolid is not null;

---实现的过程:

create or replace procedure p_tmp_update_customerdetail

is

v_BeginTran INT := 0;    -- 事务标志,初始值为0,表示没有事务

v_ErrCode   INT;

v_ErrMsg    VARCHAR2(200);   -- 处理异常变量

begin

-- 设置事务标志为1,表示开始事务

v_BeginTran := 1;

merge into t_tmp_nt_customerdetail t

using (select b.id, b.birth from t_tmp_school b where b.birth is not null) a

on (t.schoolid = a.id)

when matched then

update set t.birthdate = a.birth where t.schoolid is not null;

COMMIT;

-- 提交事务并且置事务标志为0。

v_BeginTran := 0;

EXCEPTION

WHEN OTHERS THEN

-- 如果异常,回滚事务。

IF v_BeginTran = 1 THEN

ROLLBACK;

END IF;

v_ErrCode := SQLCODE;

v_ErrMsg  := SUBSTR(SQLERRM, 1, 150);

dbms_output.put_line(v_ErrCode);

dbms_output.put_line(v_ErrMsg);

end;

--执行过程,用时1.11秒

SQL> exec  p_tmp_update_customerdetail;

--再次验证结果,先前清空birthdate的值已经有了,返回 135879 行

select count(1) from t_tmp_nt_customerdetail t

where  t.schoolid is not null

and  t.birthdate is not  null;

--而用下面类似的语句,这些数据执行了24分钟多:

update t_tmp_nt_customerdetail t

set t.birthdate = (select b.birth

from t_tmp_school b

where t.schoolid = b.id)

where t.schoolid =

(select c.id from t_tmp_school c where t.schoolid = c.id)

and t.schoolid is not null;     ---注:为什么要写这个罗嗦的条件呢?因为没有这个条件就把整个表的数据全部更新了,因此必须写,所以大家应该多实践,不要被一些表面现象所蒙蔽。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

first review of team blog(4.26)

team score team1 10team2 0team3 0team4 0team5 0team6 9team7 0team8 0team9 0team10 0

精准营销联系oracle,正确打开精准营销:用营销自动化技术发挥数据价值

正确打开精准营销:用营销自动化技术发挥数据价值甲骨文认为,以”数据优先”之道来管理客户体验,是让每一次客户互动都能真正发挥价值的重要方式。但是,当前复杂的商业环境瞬息万变,无可避免地直接影响着企业的营销战略…

Homework2-project review score of each team

team score Team19Team28Team34Team44Team515Team65Team77Team83Team96Team102

php ignore special characters,PHP忽略第5个字符?(PHP ignore 5th character?)

PHP忽略第5个字符?(PHP ignore 5th character?)我有一个简单的PHP问题。在我的PHP中 ,我有这个:$variable howareyou;有可能以某种方式修改代码,因此它只计算变量的第6个字符?所以之后,当回声它会说怎么代…

Requirements of pair programming

题目:围棋棋谱的特征搜索说明:将用户的棋盘输入作为特征,在棋谱包中读取SGF棋谱,找出特征相符的棋谱。注:不仅要考虑棋子的位置,还要考虑走棋的顺序。对找出的棋谱按照符合程度排序。实现为桌面程序&#x…

php5.4环境升级,CentOS环境中编译升级PHP至5.4版本记录

先备份mv /data/server/php /data/server/php.5.2mv /etc/init.d/php-fpm /etc/init.d/php-fpm.5.2编译源码首先先执行./buildconf --force,为了防止出现 cp:cannot stat ‘sapi/cli/php.1‘: No such file or directory./buildconf --force./configure --prefix/d…

各小组对于自己产品的预期“软件下载/用户人数”

组号 预期下载/用户人数Team1 100Team2 1000Team3 30下载,20篇博客引用Team4 1000Team5 3000Team6 100Team7 600Team8 1000下载,50个搜索结果引用Team9 300Team10 500在产品发布之后,再比照这个期望值&…

电脑系统linux怎么读,Linux怎么读

Linux怎么读Linux是一种操作系统,不过很多朋友都不知道Linux怎么读?Linux正确读法 “哩呐克斯”,音标:[li:nэks] 重音在“哩”上。由于大多数的电脑都是安装Windows,其实也可以安装Linux,不过大家都习惯了Windwos&am…

各个团队的项目评价

Team 10 – Voice Mail 该软件项目构想/计划/实现/创新等方面的优劣: 构想和计划 1. 设计思路清晰,设计说明和文档较全 2. 多种人机交互方式,所以该项目亮点之处就在于其人机交互 实现 3. 设计良好的UI 4. 下载安装Windows XP版本的软…

linux7端口聚合,centos7配置链路聚合

配置链路聚合的目的:冗余、负载均衡假如需要做链路聚合的2块网卡为eth1和eth2man nmcli-examples搜索模板Example 7(这是active/backup模式,一般round robin模式用的最多。)$ nmcli con add type team con-name Team1 ifname Team1 config team1-master-…

linux 日志切割 自带,[日志分割回滚] 使用linux自带的logrotate对nginx日志进行分割...

logrotate日志分割配置:# cat /etc/logrotate.d/nginx/data/nginx_logs/*.access_log #nginx日志所在目录{nocompress #不对日志文件进行转储压缩daily #…

大家都纷纷指出了 wp7 的优点 …

http://www.windowsphone7.com/ Windows Phone 7 终于快要和大家见面了! 下面是各路人士对它的评价: Gizmodo says its a neat, fresh start. CNET thinks the hub system is wonderful SlashGear says this is Microsofts attempt to justify its existence in …

Meeters and Greeters 接客大厅

在上海虹桥机场看到了这个标记 – “接客大厅”。 英库和有关单位最近搞了 “雷人英语” http://engkoo.msn.cn/expo/ 活动, 旨在消灭上海和周边地区的“土产英语”, 这个 “Meeters & Greeters Hall” 英语真是 “顶风作案”, 谁这么大胆? “接客大厅” 在祖国大…

旅游去

September 30 旅游指南新版上线! http://travel.msra.cn http://travel.msra.cn 1. 全新搜索体验 2.旅游目的地推荐 3.全球旅游地支持 4.旅游计划功能 5.丰富的旅游资讯

红帽Linux7怎么修改网卡名称,新安装的Centos 7系统怎么将网卡名称改为eth0?

从CentOS/RHEL7起,可预见的命名规则变成了默认。这一规则,接口名称被自动基于固件,拓扑结构和位置信息来确定。现在,即使添加或移除网络设备,接口名称仍然保持固定,而无需重新枚举,和坏掉的硬件…

软件工程教学博客 (备份)

我叫邹欣, 是微软亚洲研究院 创新工程中心 首席研发主管 (Principal Development Manager). 我和同事们一起把研究成果转化为商业软件产品和服务。近期主要专注于垂直搜索,企业搜索,软件开发工具和数字娱乐等领域。 在工作之余, 我也写书 &#xff08…

linux 防火墙 ftp,RedHat6 建立基于防火墙和SELinux的虚拟用户vsFTP

安装vsftp软件yum install vsftpd我们这里安装的版本是vsftpd-2.2.2-6.el6.i686因为我们要建立匿名账户的vsftpd所以还要安装db4和db4_utils两个软件包,redhat6已经默认安装.修改/etc/vsftpd/vsftpd.conf[rootmail ftp]# grep -v ^# /etc/vsftpd/vsftpd.confanonymous_enableYE…

两千块钱带来的 quot;希望quot;

几年以前,我参加过一个全国 “软件学院” 的评审,得到两千块现金和一些希望。我后来把钱和希望都还给同学们了,现在说明一下。 [这是个人回忆,不代表任何组织,也不确保所有信息的完全准确] 我先…

linux终端友好,Linux 中一种友好的 find 替代工具

fd 命令提供了一种简单直白的搜索 Linux 文件系统的方式。fd 是一个超快的,基于 Rust 的 Unix/Linux find 命令的替代品。它不提供所有 find 的强大功能。但是,它确实提供了足够的功能来覆盖你可能遇到的 80% 的情况。诸如良好的规划和方便的…

linux操作系统分析 课程,《Linux操作系统》课程的现状与分析

第卷第期安 徽 水利 水 电职 业技 术 学 院 学报年 月 上()《操 作 系统 》课 程 的现状 与分 析李俊娇 , 冉 兆昶 , 甘琳瑛(蚌埠经济技术职业学 院 ,安徽 蚌埠 )摘 要 :文章 剖析了高职院校《操 作系统 》课程 的现状 &#xff0…