gpt4 book ai didi

sql - 与删除和重新创建索引相比,禁用和重新启用索引有什么区别?

转载 作者:行者123 更新时间:2023-12-04 00:39:47 26 4
gpt4 key购买 nike

正如问题所述,两者在性能上有什么区别,哪个更适合什么样的场景?

还是这两个效果一样?如果适用,每种方法的优缺点是什么?

据我了解,重新创建索引也会导致其重建类似于收集统计数据 (11g)

禁用和重新启用索引怎么样?它是否也会自动收集统计信息?

请注意,我是带着需要进行大量批量插入/更新的心态来问这个问题的

非常感谢

最佳答案

我们不能禁用索引,除非它是基于函数的索引。

SQL> alter index i42 disable;
alter index i42 disable
*
ERROR at line 1:
ORA-02243: invalid ALTER INDEX or ALTER MATERIALIZED VIEW option

SQL>

我们可以让它不可用,但这有一个相当不幸的副作用:
SQL> alter index i42 unusable;

Index altered.

SQL> insert into t42 values (sysdate, 6, 'FOX IN SOCKS');
insert into t42 values (sysdate, 6, 'FOX IN SOCKS')
*
ERROR at line 1:
ORA-01502: index 'APC.I42' or partition of such index is in unusable state


SQL>

只是为了证明有关基于函数的索引的观点:
SQL> create index f42 on t42(initcap(name))
2 /

Index created.

SQL> alter index f42 disable;

Index altered.

SQL> insert into t42 values (sysdate, 6, 'MR KNOX')
2 /
insert into t42 values (sysdate, 6, 'MR KNOX')
*
ERROR at line 1:
ORA-30554: function-based index APC.F42 is disabled


SQL>

我认为这排除了出于您的目的禁用索引的可能性。如果你想在没有索引的表上工作,你需要删除它们。正如我在 my answer to your previous question 中所说的那样,这是否有意义取决于您的案例的具体情况。 ....

至于约束,我们不能删除用于强制唯一约束的索引。但是,我们可以删除约束但保留索引。在这种情况下,如果索引是唯一的,它仍然会强制执行完整性:
SQL> create unique index i42 on t42(id);

Index created.

SQL> alter table t42 add constraint t42_pk primary key (id);

Table altered.

SQL> insert into t42 values (sysdate, 5, 'MAISIE');

1 row created.

SQL> r
1* insert into t42 values (sysdate, 5, 'MAISIE')
insert into t42 values (sysdate, 5)
*
ERROR at line 1:
ORA-00001: unique constraint (APC.T42_PK) violated


SQL> alter table t42 drop constraint t42_pk;

Table altered.

SQL> insert into t42 values (sysdate, 5, 'MAISIE');
insert into t42 values (sysdate, 5, 'MAISIE')
*
ERROR at line 1:
ORA-00001: unique constraint (APC.I42) violated


SQL>

关于sql - 与删除和重新创建索引相比,禁用和重新启用索引有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20160916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com