Database 在Oracle中删除一列时,多列索引(复合)会发生什么情况

Database 在Oracle中删除一列时,多列索引(复合)会发生什么情况,database,oracle,indexing,Database,Oracle,Indexing,我有一个表中的columnA,ColumnB和一个由这两列组成的复合索引。 现在我将从表中删除列B。 现在索引会发生什么变化? 我现在是否应该单独使用ColumnA重新创建索引。一个简单的测试: SQL> create table t (c1 number, c2 number); Table created. SQL> create index i on t(c1, c2); Index created. SQL> select index_name 2 fro

我有一个表中的columnA,ColumnB和一个由这两列组成的复合索引。 现在我将从表中删除列B。 现在索引会发生什么变化? 我现在是否应该单独使用ColumnA重新创建索引。

一个简单的测试:

SQL> create table t (c1 number, c2 number);

Table created.

SQL> create index i on t(c1, c2);

Index created.

SQL> select index_name
  2  from user_indexes
  3  where table_name = 'T';

INDEX_NAME
------------------------------
I

SQL> alter table t drop column c2;

Table altered.

SQL> select index_name
  2  from user_indexes
  3  where table_name = 'T';

no rows selected

SQL>
一个简单的测试:

SQL> create table t (c1 number, c2 number);

Table created.

SQL> create index i on t(c1, c2);

Index created.

SQL> select index_name
  2  from user_indexes
  3  where table_name = 'T';

INDEX_NAME
------------------------------
I

SQL> alter table t drop column c2;

Table altered.

SQL> select index_name
  2  from user_indexes
  3  where table_name = 'T';

no rows selected

SQL>

你不能在测试台上试试吗?谢谢@Aleksej我已经试过了。。得到了同样的结果。需要重新创建索引。删除列时,其所有关联索引也会被删除。右。这毕竟是你所期望的。。一个索引怎么可能存在并引用一个不存在的列?@Aleksej你完全正确。。。但它在不同的机器上以不同的方式运行(这可能是由于某些缓存)。它删除了索引,无法创建具有相同名称的新索引,因为它表明存在相同的索引。但它在另一台机器上运行良好。这使我不得不发布一个专家意见的查询。你不能在测试表上试试吗?谢谢@Aleksej我已经试过了。。得到了同样的结果。需要重新创建索引。删除列时,其所有关联索引也会被删除。右。这毕竟是你所期望的。。一个索引怎么可能存在并引用一个不存在的列?@Aleksej你完全正确。。。但它在不同的机器上以不同的方式运行(这可能是由于某些缓存)。它删除了索引,无法创建具有相同名称的新索引,因为它表明存在相同的索引。但它在另一台机器上运行良好。这使我不得不发布一个专家意见的查询。