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; ---注:为什么要写这个罗嗦的条件呢?因为没有这个条件就把整个表的数据全部更新了,因此必须写,所以大家应该多实践,不要被一些表面现象所蒙蔽。
oracle merge 效率慢,更新语句的效率比较(merge into )相关推荐
- oracle 分页语句效率高,Oracle 10g SQL分页查询语句和效率分析
下面统计一下这张表中的记录数: SQL> select count(*) from customers; COUNT(*) ---------- 55500 已用时间: 00: 00: 00. ...
- Oracle SQL:update更新语句总结
update语句总结 update SQL用途: 用于修改表中的数据 语法: UPDATE 表名称 SET 列名称 = 新值 <WHERE 条件> 注意事项: ①.更新数字列则可以直接提供 ...
- mysql数据库更新语句效率_MySQL数据库优化
一.常用查询 1.1 查询链接MySQL服务器的次数 mysql> show status like 'connections'; +---------------+-------+ | Var ...
- 【初级C语言】表达式和基本语句(布尔型与0比较,浮点型与0比较,switch语句,提高循环语句的效率)
一.运算符的优先级 1.如果代码行中的运算符比较多,要用括号确定表达式的操作顺序.以防止产生歧义并提高可读性. 2.即使掌握了各个运算符的运算规则(顺序,结合性等)仍可能写出一个不能确定唯一计算路径的 ...
- php和 sqlserver效率,SQLServer语句执行效率及性能测试
写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的 ...
- 一个关于Oracle更新语句引发的时间字段类型的问题
想当初我在做一个ASP.NET网站的时候,用的是Oracle数据库更新数据.表里面的字段有int类型的,string类型的,还有date类型的,在和asp.NET前台控件绑定更新的时候总是出现问题,我 ...
- oracle菜鸟学习之 复杂的更新语句使用
oracle菜鸟学习之 复杂的更新语句使用 实例与答案 问题:表T1里有a,b,c...N个字段,表T2里有a,b,c三个字段,然后想在T1中"c"与表T2中"c&quo ...
- mysql 执行效率命令_MySQL优化--explain 分析sql语句执行效率
MySQL优化--explain 分析sql语句执行效率 explain 命令 explain 命令在解决数据库性能上市第一推荐使用命令,大部分的性能问题可以通过此命令来简单解决,explain可以用 ...
- C++循环语句的效率
C++循环语句的效率 C++/C循环语句中,for语句使用频率最高,while语句其次,do语句很少用.本节重点论述循环体的效率.提高循环体效率的基本办法是降低循环体的复杂性. [建议4-4-1]在多 ...
最新文章
- 大家都能读懂的IT生活枕边书
- iOS最好用的引导页
- java缺_java – 缺少主类
- Docker4Dev #6 使用 Windows Container 运行.net应用
- pytorch学习笔记(三十九):Fine-Tuning
- 提示microsoft incremental linker已停止工作解决方法
- 面试题之TCP三次握手和四次挥手详解
- 倡议书格式范文_倡议书写作格式及范文(共9篇)
- oracle 临时表空间的作用和创建以及相关操作
- css直角线_CSS秘密花园:折角效果
- 关于图片的Exif信息
- vue 获取当前本机ip_Vue项目启动时自动获取本机IP地址
- Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper.........[已解决]
- 《漫画英国》的读书笔记感想4069字
- NVDIMM在闪存存储中的应用探讨
- win10+python开发django项目day03
- R语言并行计算spearman相关系数
- 中富金石马力老师:2022年中央一号文件发布 时隔多年重提加强粮库建设
- 【财务_会计1_3】会计基本假设与会计基础
- android录音波浪动画_Android自定义View实现波浪动画
热门文章
- 列表、字典补充点、strJoin方法、set()集合、和深浅拷贝
- OpenGL ES入门
- C#使用HTML文件中的file文件上传,用C#代码接收上传文件
- MySQL Cluster 4个数据节点压力测试--mysqlslap工具压400W写
- 计算机网络——因特网的接入技术
- Leetcode--102. 二叉树的层次遍历
- 用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...
- java7 uri,细数Java8中那些让人纵享丝滑的文件操作
- java 数据类型 string_java的基本数据类型和引用数据类型都有哪些,string属于什么类型...
- 判别分析分为r型和q型吗_电流互感器天天见,但是你真正了解和知道它的一些注意事项吗?...