ORACLE中索引会产生重做日志么 问下大家,ORACLE 11G在做有索引的字段上做insert或update或delete操作时,除了操作本身产生的重做日志外,索引会产生重做日志么?为什么有的书上总说减少nologging index的开销呢? 请大家帮忙回答下, 谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 似乎delete整个表的数据以后,索引数据还在,所以要经常reorg 索引。我也想知道答案,关注。 个人觉得不会, 当对有索引的字段做更新时,表会产生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.aspxQ Q 群:62697716 nologgiing是不一定不产生redo的,建议楼主好好实验一下。是减少而不是不产生。archivelog和noarchivelog下又不一样。 另外,index也是要产生redo的。 楼上的,你是说如果执行这样的语句select * from author where a_id='1'或 insert into author(a_id) value('2');在a_id上如果有索引 不管是select还是insert操作ORACLE都会产生重做日志么? 1索引也会产生相应的重做日志的这样才能保证在应用日志恢复的时候相应的索引也会被更改2nologging并不代表就完全不产生重做日志和其他很多因素有关比如说数据库的模式(归档或者非归档)表的创建模式 NOLOGGING或者LOGGING插入数据的模式 APPEND或者NOAPPEND inserto当然会啊,但select 就不一定了,如果涉及到块延迟清除的话第一次也会产生redo 请问wh62592855select * from author where a_id='1' COMMIT我在SQLPLUS里执行了这两句话,查看他的执行计划发现 REDO SIZE=0那是不是说select中用到了索引,就不会产生redo,但insert中用到索引,索引还会产生额外的redo呢?还有liuyi8903您说的select时块延迟清除时是什么时候啊?不知是什么意思?压力测试中会块延迟清除么 select一般情况下是不会产生REDO的 除非需要延迟块清除的时候至于延迟块清除这个概念有些深入了 如果你想了解的可以参考下面的链接http://blog.csdn.net/wh62592855/archive/2009/10/26/4730623.aspx还有 你的对select、insert和索引的关系肯能有些不太清楚select和insert执行的过程中都会牵扯到索引select只是通过索引更快的找到需要的数据而已 不会对索引进行修改 因此不会产生索引相关的REDO 就算产生了REDO 那么就是前面所说的延迟块清除导致的而insert是往表里插入一条数据 这个时候在索引中也要相应的插入一条数据不然你下次如何通过索引找到这条新插入的数据呢? 对吧 呵呵 数据库处理效率优化问题 Rman删除日志失败 sqlldr重复数据替换和插入 分页显示数据的时候没法显示,数据也添加表中了,不知道怎么回事? 区的分配机制 如何按照姓名的韵母进行查询排序 OracleOraHome92ManagementServer服务启动不了了 SQLSERVER2000数据库到ORACLE的数据传输问题? 如何求两个Date类型的变量的之间的时间差。 各位大虾,请问怎么在proc 调用存储过程 union all 的效率问题 oracle 查询问题
我也想知道答案,关注。
个人觉得不会, 当对有索引的字段做更新时,表会产生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
select * from author where a_id='1'
或 insert into author(a_id) value('2');在a_id上如果有索引 不管是select还是insert操作ORACLE都会产生重做日志么?
索引也会产生相应的重做日志的
这样才能保证在应用日志恢复的时候相应的索引也会被更改2
nologging并不代表就完全不产生重做日志
和其他很多因素有关
比如说数据库的模式(归档或者非归档)
表的创建模式 NOLOGGING或者LOGGING
插入数据的模式 APPEND或者NOAPPEND
inserto当然会啊,但select 就不一定了,如果涉及到块延迟清除的话第一次也会产生redo
select * from author where a_id='1'
COMMIT我在SQLPLUS里执行了这两句话,查看他的执行计划发现 REDO SIZE=0
那是不是说select中用到了索引,就不会产生redo,但insert中用到索引,索引还会产生额外的redo呢?还有liuyi8903您说的select时块延迟清除时是什么时候啊?不知是什么意思?压力测试中会块延迟清除么
至于延迟块清除这个概念有些深入了 如果你想了解的可以参考下面的链接
http://blog.csdn.net/wh62592855/archive/2009/10/26/4730623.aspx还有 你的对select、insert和索引的关系肯能有些不太清楚
select和insert执行的过程中都会牵扯到索引
select只是通过索引更快的找到需要的数据而已 不会对索引进行修改 因此不会产生索引相关的REDO 就算产生了REDO 那么就是前面所说的延迟块清除导致的而insert是往表里插入一条数据 这个时候在索引中也要相应的插入一条数据
不然你下次如何通过索引找到这条新插入的数据呢? 对吧 呵呵