ORACLE批量更新四种方法比较
现在我们有2张表 如下:T1--大表 10000笔 T1_FK_ID T2--小表 5000笔 T2_PK_IDT1通过表中字段ID与T2的主键ID关联 模拟数据如下:--T2有5000笔数据create table T2asselect rownum id, a.*from all_objects awhere 1=0; -- Create/Recreate primary, unique and foreign key constraints alter table T2add constraint T2_PK_ID primary key (ID); insert /*+ APPEND */ into T2select rownum id, a.*from all_objects a where rownum<=5000; --T1有10000笔数据 create table T1asselect rownum sid, T2.*from T2 where 1=0; -- Create/Recreate primary, unique and foreign key constraints alter table T1add constraint T1_FK_ID foreign key (ID)references t2 (ID); insert /*+ APPEND */ into T1select rownum sid, T2.*from T2; insert /*+ APPEND */ into T1select rownum sid, T2.*from T2; --更新Subobject_Name字段,之前为nullupdate T2 set T2.Subobject_Name='StevenHuang' 我们希望能把T1的Subobject_Name字段也全部更新成'StevenHuang',也就是说T1的10000笔数据都会得到更新 方法一写PL/SQL,开cursordeclare l_varID varchar2(20); l_varSubName varchar2(30);cursor mycur is select T2.Id,T2.Subobject_Name from T2; begin open mycur; loopfetch mycur into l_varID,l_varSubName;exit when mycur %notfound;update T1 set T1.Subobject_Name = l_varSubName where T1.ID = l_varID;end loop;close mycur;end;---耗时39.716s显然这是最传统的方法,如果数据量巨大的话(4000万笔),还会报”snapshot too old”错误退出 方法二.用loop循环,分批操作declare i number; j number;begini := 1;j := 0;select count(*) into j from T1;loopexit when i > j;update T1 set T1.Subobject_Name = (select T2.Subobject_Name from T2 where T1.ID = T2.ID)where T1.ID >= i and T1.ID <= (i + 1000);i := i + 1000;end loop;end;--耗时0.656s,这里一共循环了10次,如果数据量巨大的话,虽然能够完成任务,但是速度还是不能令人满意。(例如我们将T1--大表增大到100000笔 T2--小表增大到50000笔) 耗时10.139s 方法三.--虚拟一张表来进行操作,在数据量大的情况下效率比方法二高很多update (select T1.Subobject_Name a1,T2.Subobject_Name b1 from T1,T2 where T1.ID=T2.ID)set a1=b1; --耗时3.234s (T1--大表增大到100000笔 T2--小表增大到50000笔) 方法四.--由于UPDATE是比较消耗资源的操作,会有redo和undo操作,在这个例子里面我们可以换用下面的方法,创建一张新表,因为采用insert比update快的多,之后你会有一张旧表和一张新表,然后要怎么做就具体情况具体分析了~~~~~create table T3 as select * from T1 where rownum<1;alter table T3 nologging;insert /*+ APPEND */ into T3select T1.* from T1,T2 where T1.ID=T2.ID;--耗时0.398s (T1--大表增大到100000笔 T2--小表增大到50000笔) *以上所有操作都已经将分析执行计划所需的时间排除在外
ORACLE批量更新四种方法比较相关推荐
- java oracle 批量更新_ORACLE批量更新三种方法比较
在大型的数据库应用中,我们经常会有针对表与表之间的关键建进行字段更新,那么在这个时候,我们就不能写简单的update来实现更新操作,而要针对具体的数据量来进行批量的update,下面几个例子是常用的S ...
- oracle批量新增字段工具,mybatis 中oracle 批量新增三种方法
第一种 < insert id =" insert_table " parameterClass ="java.util.List" > ins ...
- mysqlplus 批量插入_ibatis结合oracle批量插入三种方法的测评
第一种 < insert id =" insert_table " parameterClass ="java.util.List" > inser ...
- oracle执行存储过程参数,Oracle 执行存储过程四种方法(带参数 不带参数)
1.如果是命令窗口就用exec 存储过程名: 1 EXEC procedure;--procedure是存储过程名 2.如果是 SQL窗口就用 begin 存储过程名 end; 1 2 3 b ...
- oracle进行排序,oracle排序的几种方法
1.创建数据库表 CREATE TABLE USER_INFO ( USERID VARCHAR2(10 BYTE) NOT NULL, USERNAME ...
- oracle调整字段精度的四种方法
oracle调整字段精度的四种方法: 01_执行用户_ddl/dml_表名_注释(建表/授权/同义词) 调整方式一:(精度只能调大不能调小) alter table table_name_a MODI ...
- oracle绑定主键,oracle添加主键的四种方法:
oracle添加主键的四种方法: 列级,表级建立主键 drop table constraint_test; 1.create table constraint_test ( name_id numb ...
- 【Oracle批量更新】根据一个大表批量更新另一大表的方法比较
转载自:http://blog.csdn.net/onemetre/article/details/6525348 [问题]现在有两个千万级别的结构相同数据不同数据表T_SMS_PHONENO(目的表 ...
- 如何连接远程数据oracle数据库代码,Oracle连接远程数据库的四种方法
Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍 第一种方法: 若oracle服务器装在本机上,那就不多说了,连 ...
最新文章
- 中国海洋生物医药产业专项应用调研及战略展望规划分析报告2021-2027年
- 自定义控件-侧边菜单SlidingMenu(滑动菜单)
- SpringBoot 对象输出
- lightoj 1020 (博弈)
- 判断个十百千位之后是否大于20 java——CSDN博客
- 首款搭载鸿蒙os的设备,华为发布会配件汇总,首款搭载 鸿蒙OS 的设备来了
- 如何用vrml技术实现虚拟计算机组装实验,基于VRML的计算机组装虚拟实验的研究与实现_吴兰.pdf...
- 使用Cobbler安装多版本操作系统
- 12.2 asmca fails with 'ORA-00845'
- 四、Hyper-v Server 2008r2 设置远程管理
- Python设计模式:策略模式
- 在线音乐播放器 --- 图片上传
- 浙江省计算机二级理论知识,2020年浙江省高校计算机二级MS Office考试大纲
- Invest模型中HAbitat quality(生境质量)的计算过程
- for循环练习题-编写程序,根据输入行数,输出金字塔图案
- 习题5-5 使用函数统计指定数字的个数(15 分)
- 【C语言】扫雷游戏(递归实现展开一片)8000字详细教学
- Oracle日志挖掘技术logminer
- bixby怎么编程_三星的Bixby很烂。 这是如何将其关闭。
- Numpy || np.arange()、np.linspace()、np.logspace()、np.zeros()、np.ones()函数用法指南