问下大家,ORACLE 11G在做有索引的字段上做insert或update或delete操作时,除了操作本身产生的重做日志外,索引会产生重做日志么?为什么有的书上总说减少nologging index的开销呢?     请大家帮忙回答下, 谢谢了!

解决方案 »

  1.   

    似乎delete整个表的数据以后,索引数据还在,所以要经常reorg 索引。
    我也想知道答案,关注。
      

  2.   


    个人觉得不会, 当对有索引的字段做更新时,表会产生undo前镜像,并对索引进行相应的更新。所以对有索引的表做插入的时候,如果是写日志的情况下,表需要写redo log, 如果是大量的插入会很耗时。如果表是在nologing 的模式下, 就不会写redo log日志,这样插入的速度会块很多。------------------------------------------------------------------------------
    Blog: http://blog.csdn.net/tianlesoftware
    网上资源: http://tianlesoftware.download.csdn.net
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
    Q Q 群:62697716
      

  3.   

    nologgiing是不一定不产生redo的,建议楼主好好实验一下。是减少而不是不产生。archivelog和noarchivelog下又不一样。
      

  4.   

    另外,index也是要产生redo的。
      

  5.   

    楼上的,你是说如果执行这样的语句
    select * from author where a_id='1'
    或 insert into author(a_id) value('2');在a_id上如果有索引 不管是select还是insert操作ORACLE都会产生重做日志么?
      

  6.   

    1
    索引也会产生相应的重做日志的
    这样才能保证在应用日志恢复的时候相应的索引也会被更改2
    nologging并不代表就完全不产生重做日志
    和其他很多因素有关
    比如说数据库的模式(归档或者非归档)
    表的创建模式 NOLOGGING或者LOGGING
    插入数据的模式 APPEND或者NOAPPEND
      

  7.   


    inserto当然会啊,但select 就不一定了,如果涉及到块延迟清除的话第一次也会产生redo
      

  8.   

    请问wh62592855
    select * from author where a_id='1' 
    COMMIT我在SQLPLUS里执行了这两句话,查看他的执行计划发现 REDO SIZE=0
    那是不是说select中用到了索引,就不会产生redo,但insert中用到索引,索引还会产生额外的redo呢?还有liuyi8903您说的select时块延迟清除时是什么时候啊?不知是什么意思?压力测试中会块延迟清除么
      

  9.   

    select一般情况下是不会产生REDO的 除非需要延迟块清除的时候
    至于延迟块清除这个概念有些深入了 如果你想了解的可以参考下面的链接
    http://blog.csdn.net/wh62592855/archive/2009/10/26/4730623.aspx还有 你的对select、insert和索引的关系肯能有些不太清楚
    select和insert执行的过程中都会牵扯到索引
    select只是通过索引更快的找到需要的数据而已 不会对索引进行修改 因此不会产生索引相关的REDO 就算产生了REDO 那么就是前面所说的延迟块清除导致的而insert是往表里插入一条数据 这个时候在索引中也要相应的插入一条数据
    不然你下次如何通过索引找到这条新插入的数据呢? 对吧  呵呵