问题描述
你好,汤姆,
向你问好!
我向您提出的问题是关于在稍后阶段更改表结构时重建索引。
我们有一个现有的 _p表,它的结构需要改变一点,现在需要添加一些新的属性 (列)。因此,为此,我们更改了表格,也替换了现有的同义词和视图。
但是,表上已经创建了一些索引,并且已经创建的索引使用已经存在的属性 (列)。
从现在开始,我们在 _p表中又添加了3个属性 (列),是否需要在此处重建现有索引?
我不认为重建,因为索引不使用正在添加的新属性 (列)。但是,我仍然有一个疑问,表结构的变化会影响索引吗?在任何情况下,由于表更改,索引都会失效吗?
请提供您有用的反馈。
非常感谢!
问候,
Himani裤子
向你问好!
我向您提出的问题是关于在稍后阶段更改表结构时重建索引。
我们有一个现有的 _p表,它的结构需要改变一点,现在需要添加一些新的属性 (列)。因此,为此,我们更改了表格,也替换了现有的同义词和视图。
但是,表上已经创建了一些索引,并且已经创建的索引使用已经存在的属性 (列)。
从现在开始,我们在 _p表中又添加了3个属性 (列),是否需要在此处重建现有索引?
我不认为重建,因为索引不使用正在添加的新属性 (列)。但是,我仍然有一个疑问,表结构的变化会影响索引吗?在任何情况下,由于表更改,索引都会失效吗?
请提供您有用的反馈。
非常感谢!
问候,
Himani裤子
专家解答
一般来说,添加/删除/更改列时,索引号将保持有效:
但是有各种操作会使索引无法使用。如离线表移动:
12.2添加了在线选项,以使其能够在移动过程中更新索引。
随着每个版本的发布,更多的DDL操作具有在线功能。因此,如果您担心,最好的选择是:
测试!
运行DDL语句,看看是否有索引不可用。
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




