Avi*_*ias 2 sql oracle indexing performance bulk-load
正如问题所述,两者在性能方面有何不同,哪种情况更好?
或者这两个有同样的效果吗?如果适用,每种方法的优缺点是什么?
根据我的理解,重建索引也会导致其重建类似于收集统计数据(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>
Run Code Online (Sandbox Code Playgroud)
我们可以使它无法使用,但这有一个相当不幸的副作用:
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>
Run Code Online (Sandbox Code Playgroud)
只是为了证明基于函数的索引的观点:
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>
Run Code Online (Sandbox Code Playgroud)
我认为这会排除为您的目的禁用索引.如果您想在没有索引的表上工作,则需要删除它们.这是否有意义取决于你案件的具体情况,正如我在回答你上一个问题时所说的那样 ......
至于约束,我们不能删除用于强制执行唯一约束的索引.但是,我们可以删除约束但保留索引.在这种情况下,如果索引是唯一的,它仍将强制执行完整性:
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4185 次 |
| 最近记录: |