下列哪条语句不会引起mysql的索引失效_在Oracle数据库中,哪些操作会导致索引失效?...

原标题:在Oracle数据库中,哪些操作会导致索引失效?

题目

在Oracle数据库中,哪些操作会导致索引失效?

A答案

当某些操作导致数据行的ROWID改变,索引就会完全失效。可以分普通表和分区表来讨论哪些操作将导致索引失效。

(一)普通表索引失效的情形如下所示:

① 手动置索引无效:ALTER INDEX IND_OBJECT_ID UNUSABLE;。

② 如果对表进行MOVE操作(包含移动表空间和压缩操作)或在线重定义表后,那么该表上所有的索引状态会变为UNUSABLE。MOVE操作的SQL语句为:ALTER TABLE TT MOVE;。

③ SQL*Loader加载数据。

在SQL*Loader加载过程中会维护索引,由于数据量比较大,在SQL*Loader加载过程中出现异常情况,也会导致Oracle来不及维护索引,导致索引处于失效状态,影响查询和加载。异常情况主要有:在加载过程中杀掉SQL*Loader进程、重启或表空间不足等。

(二)分区表索引失效的情形如下所示:

① 对分区表的某个含有数据的分区执行了TRUNCATE、DROP操作可以导致该分区表的全局索引失效,而分区索引依然有效,如果操作的分区没有数据,那么不会影响索引的状态。需要注意的是,对分区表的ADD操作对分区索引和全局索引没有影响。

② 执行EXCHANGE操作后,全局索引和分区索引都无条件地会被置为UNUSABLE(无论分区是否含有数据)。但是,若包含INCLUDING INDEXES子句(缺省情况下为EXCLUDING INDEXES),则全局索引会失效,而分区索引依然有效。

③ 如果执行SPLIT的目标分区含有数据,那么在执行SPLIT操作后,全局索引和分区索引都会被被置为UNUSABLE。如果执行SPLIT的目标分区没有数据,那么不会影响索引的状态。

④ 对分区表执行MOVE操作后,全局索引和分区索引都会被置于无效状态。

④ 手动置其无效:ALTER INDEX IND_OBJECT_ID UNUSABLE;。

对于分区表而言,除了ADD操作之外,TRUNCATE、DROP、EXCHANGE和SPLIT操作均会导致全局索引失效,但是可以加上UPDATE GLOBAL INDEXES子句让全局索引不失效。重建分区索引的命令为:ALTER INDEX IDX_RANG_LHR REBUILD PARTITION P1;。

分区表的索引是否失效情况如下表所示:

a72a8c696a6bae44924ed79d8ab31289.png

cac7d449059537e9b772c6522cd53212.png

DB笔试面试历史连接

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

文章来源:DBA宝典

《Oracle特殊恢复原理与实战(DSI系列)》基于Oracle DSI403e和BBED工具修练Oracle内功心法。通过学习,深入理解Oracle,学成后可达成从业10年以上DBA的技术水平,练就Oracle的最高技术。获得一份资深DBA的职位将不再是问题,期待你的加入。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值