继续昨天的问题。我曾经面对一个工作,要把一张很大的表中,3个月前的数据删掉,转储到历史表中。这将是一个很大的工程,需要在一周内完成,而且只能在夜里进行工作。这就需要考虑到性能问题了,考虑到网上很多人说nologging会很快,我就做个试验,比较一下效率。

实验环境:windows7 x64。oracle11g,11.2.0.1.0。归档模式,实验表:test1(create table test1 as select * from dba_objects;)。

实验步骤:

实验之前记录的 redo size:35580568
insert的比较:
insert into test1 (select * from dba_objects);
commit; 

 
直接插入,redo size:49178876 产生的redo size:13598308
nologging插入,redo size:65167892 产生的redo size:15989016
append插入,redo size:78455764 产生的redo size:13287872

更改表为nologging,记录当前的redo size:78626484
直接插入,redo size:92136040 产生的redo size:13509556
append插入,redo size:99624700 产生的redo size:7488660

update的比较
update test1 set object_id = XXXX;
commit;

记录redo size: 107764388
直接更新,redo size:212615144 产生的redo size:104850756
nologging更新,redo size:319452512 产生的redo size:106837368
append更新,redo size:425422288 产生的redo size:105969776

更改表为nologging,redo size:621576604
直接更新,redo size: 726667444 产生的redo size:105090840
append更新,redo size:827687192 产生的redo size:101019748

综上,可以看到联合使用nologging和append可以很有效的提高insert的效率,但是对于update就不是这么灵光了。
     查询oracle11gR2的官方帮助文档中关于append的部分,发现如下:
Conventional INSERT is the default in serial mode. In serial mode, direct path can be used only if you include the APPEND hint.
Direct-path INSERT is the default in parallel mode. In parallel mode, conventional insert can be used only if you specify the NOAPPEND hint.
In direct-path INSERT, data is appended to the end of the table, rather than using existing space currently allocated to the table. As a result, direct-path INSERT can be considerably faster than conventional INSERT.
     由上述说明可以看出,append只是对insert起作用,直接将数据插入表的表尾,而不是去插入表中空闲的区域。但是这样提升效率我却有点不安,是不是会有些连带的问题现在还没有展现出来。接下来我会关于这个继续研究。

转载于:https://www.cnblogs.com/wingsless/archive/2011/12/07/2279222.html

关于redo(二)插入更新数据时的效率比较相关推荐

  1. 向mysql表中插入/更新数据时自动添加创建时间/更新时间

    目录 处理方式一:修改数据库字段类型 测试插入数据: 测试更新数据: 处理方式二:配置生成策略 [MySQL版本] 8.x 处理方式一:修改数据库字段类型 自动添加创建时间: 将字段类型设置为TIME ...

  2. oracle更新数据没反应,ORACLE更新数据时如果有就更新没有就插入

    SQL写法: begin update table_name set salary = 10000 where emp_id = 5; if sql%notfound then insert into ...

  3. oracle 数据有引号,oracle插入字符串数据时字符串中有'单引号问题

    使用insert into(field1,field2...) values('val1','val2'...)时,若值中有单引号时会报错. 处理方法:判断一下val1,val2中是否含有单引号,若含 ...

  4. 在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案[转]

    在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案 病症表现为:主要表现为用T-sql语句插入中文数据时数据库显示全是问号"???"  解决办法: 第一种办法 ...

  5. mysql并发_MySQL并发更新数据时的处理方法

    UPDATE是否会加锁? SQL语句为如下时,是否会加锁? UPDATE table1 SET num = num + 1 WHERE id=1; 答案是不会 实际上MySQL是支持给数据行加锁(In ...

  6. 数据库插入大量数据时不要忘记先删除索引(小技巧)

    数据库插入大量数据时不要忘记先删除索引,插入完成后再重新建立索引,索引会非常影响插入数据的速度.

  7. java数据库的优化_用Java向数据库中插入大量数据时的优化

    使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试: public void ex ...

  8. kettle 插入更新 数据增量_kettle基于时间戳增量更新

    思路1: 1.提前建好ts时间表,设置两个字段分别为current_t和load_t,current用于比较原表中日期的上限,load_t则为上次加载的日期,几位原表中日期的下限. 1 create ...

  9. kettle 插入更新 数据增量_使用Kettle实现数据实时增量同步

    2018-09-28: 示例job已上传至github,地址见文末 0. 前言 本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法. ...

最新文章

  1. 【剑指offer-Java版】23从上往下打印二叉树
  2. PHP学习之没有权限修改hosts文件
  3. linux下rpm方式安装mysql5.6及问题解决
  4. 附件文件无法保存到服务器,可能是目录属性设置问题,请与管理员联系,Discuz不能上传过大文件的解决办法...
  5. P4424-[HNOI/AHOI2018]寻宝游戏【结论】
  6. 19个AI热门应用领域,你确定不了解一下?
  7. 接口可以继承多个接口总结
  8. 开源矿工 - 记一个完整的软件是如何开发和运行的
  9. Mybatis分页查询(通过SQL分页实现)
  10. 1620:质因数分解
  11. ALC662 在Mac中的安装
  12. jenkins:Failed to get hostnam执行启动脚本不执行
  13. Android基础学习笔记14:安卓手势编程
  14. 电脑主板为什么不取消电池?
  15. Java网课基础笔记(20)19-08-02
  16. 计算器算贝塞尔公式_绝版应用!超级好用的计算器!
  17. #pragma DATA_SECTION的使用
  18. 论文解读:《XG‑ac4C:使用带有电子离子相互作用假电位的eXtreme梯度增强技术鉴定mRNA中的N4-乙酰胞苷(ac4C)》
  19. 电脑安装Win10 + Linux 双系统
  20. 中国联通3g上网设置

热门文章

  1. 快速连续点击两次出现相同内容的解决方法
  2. 【总结】栈溢出StacOverflowError
  3. 启动MySQL出错: Starting MySQL….. ERROR! The server quit with
  4. PostgreSQL在何处处理 sql查询之五十二
  5. windows8不能更新?
  6. 分布式文件系统Hadoop
  7. Linux系统运维工程师PDF文档精选
  8. 戴尔坐拥100亿现金 收购目标剑指何方?
  9. linux的passwd命令的作用,Linux passwd 命令的使用
  10. 全文搜索引擎有哪些?_搜索引擎工作原理是什么?seo蜘蛛抓取会受到哪些因素影响?...