现在我们有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批量更新四种方法比较相关推荐

  1. java oracle 批量更新_ORACLE批量更新三种方法比较

    在大型的数据库应用中,我们经常会有针对表与表之间的关键建进行字段更新,那么在这个时候,我们就不能写简单的update来实现更新操作,而要针对具体的数据量来进行批量的update,下面几个例子是常用的S ...

  2. oracle批量新增字段工具,mybatis 中oracle 批量新增三种方法

    第一种 < insert  id =" insert_table "  parameterClass ="java.util.List" > ins ...

  3. mysqlplus 批量插入_ibatis结合oracle批量插入三种方法的测评

    第一种 < insert id =" insert_table " parameterClass ="java.util.List" > inser ...

  4. oracle执行存储过程参数,Oracle 执行存储过程四种方法(带参数 不带参数)

    1.如果是命令窗口就用exec 存储过程名: 1 EXEC  procedure;--procedure是存储过程名 2.如果是  SQL窗口就用 begin  存储过程名  end; 1 2 3 b ...

  5. oracle进行排序,oracle排序的几种方法

    1.创建数据库表 CREATE TABLE USER_INFO ( USERID      VARCHAR2(10 BYTE)                 NOT NULL, USERNAME   ...

  6. oracle调整字段精度的四种方法

    oracle调整字段精度的四种方法: 01_执行用户_ddl/dml_表名_注释(建表/授权/同义词) 调整方式一:(精度只能调大不能调小) alter table table_name_a MODI ...

  7. oracle绑定主键,oracle添加主键的四种方法:

    oracle添加主键的四种方法: 列级,表级建立主键 drop table constraint_test; 1.create table constraint_test ( name_id numb ...

  8. 【Oracle批量更新】根据一个大表批量更新另一大表的方法比较

    转载自:http://blog.csdn.net/onemetre/article/details/6525348 [问题]现在有两个千万级别的结构相同数据不同数据表T_SMS_PHONENO(目的表 ...

  9. 如何连接远程数据oracle数据库代码,Oracle连接远程数据库的四种方法

    Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍 第一种方法: 若oracle服务器装在本机上,那就不多说了,连 ...

最新文章

  1. 中国海洋生物医药产业专项应用调研及战略展望规划分析报告2021-2027年
  2. 自定义控件-侧边菜单SlidingMenu(滑动菜单)
  3. SpringBoot 对象输出
  4. lightoj 1020 (博弈)
  5. 判断个十百千位之后是否大于20 java——CSDN博客
  6. 首款搭载鸿蒙os的设备,华为发布会配件汇总,首款搭载 鸿蒙OS 的设备来了
  7. 如何用vrml技术实现虚拟计算机组装实验,基于VRML的计算机组装虚拟实验的研究与实现_吴兰.pdf...
  8. 使用Cobbler安装多版本操作系统
  9. 12.2 asmca fails with 'ORA-00845'
  10. 四、Hyper-v Server 2008r2 设置远程管理
  11. Python设计模式:策略模式
  12. 在线音乐播放器 --- 图片上传
  13. 浙江省计算机二级理论知识,2020年浙江省高校计算机二级MS Office考试大纲
  14. Invest模型中HAbitat quality(生境质量)的计算过程
  15. for循环练习题-编写程序,根据输入行数,输出金字塔图案
  16. 习题5-5 使用函数统计指定数字的个数(15 分)
  17. 【C语言】扫雷游戏(递归实现展开一片)8000字详细教学
  18. Oracle日志挖掘技术logminer
  19. bixby怎么编程_三星的Bixby很烂。 这是如何将其关闭。
  20. Numpy || np.arange()、np.linspace()、np.logspace()、np.zeros()、np.ones()函数用法指南

热门文章

  1. 软件设计 -- 流程图的重要性
  2. 致力于绿色环保的美国大型数据中心
  3. python----iter\next
  4. js判断浏览器类型、是否为移动客户端访问
  5. javascript一些基础知识
  6. perl的几个小tips
  7. 《并行计算的编程模型》一3.5 远程内存访问:put和get
  8. PgSQL · 应用案例 · 聚集存储 与 BRIN索引
  9. php完全匹配,如何在PHP中使用正则表达式找到完全匹配的内容?
  10. 如何测试并调试基于 NDK 的 Android 应用