暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 更改表结构时需要重建索引

ASKTOM 2020-05-06
687

问题描述

你好,汤姆,

向你问好!
我向您提出的问题是关于在稍后阶段更改表结构时重建索引。
我们有一个现有的 _p表,它的结构需要改变一点,现在需要添加一些新的属性 (列)。因此,为此,我们更改了表格,也替换了现有的同义词和视图。

但是,表上已经创建了一些索引,并且已经创建的索引使用已经存在的属性 (列)。
从现在开始,我们在 _p表中又添加了3个属性 (列),是否需要在此处重建现有索引?
我不认为重建,因为索引不使用正在添加的新属性 (列)。但是,我仍然有一个疑问,表结构的变化会影响索引吗?在任何情况下,由于表更改,索引都会失效吗?

请提供您有用的反馈。

非常感谢!

问候,
Himani裤子

专家解答

一般来说,添加/删除/更改列时,索引号将保持有效:

create table t (
  c1 int, c2 varchar2(10)
);

create index i1 on t ( c1 );
create index i2 on t ( c2 );

insert into t values ( 1, 'c' );
commit;

alter table t 
  modify c2 varchar2(100);
  
alter table t
  add c3 int;
  
select index_name, status 
from   user_indexes
where  table_name = 'T';

INDEX_NAME    STATUS   
I1            VALID     
I2            VALID     


但是有各种操作会使索引无法使用。如离线表移动:

alter table t
  move;
  
select index_name, status 
from   user_indexes
where  table_name = 'T';

INDEX_NAME    STATUS     
I1            UNUSABLE    
I2            UNUSABLE  


12.2添加了在线选项,以使其能够在移动过程中更新索引。

随着每个版本的发布,更多的DDL操作具有在线功能。因此,如果您担心,最好的选择是:

测试!

运行DDL语句,看看是否有索引不可用。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论