删除索引和创建索引VS将索引设置为不可用和重建索引

时间:2018-01-09 03:03:43

标签: oracle indexing

如何知道哪一个是选择带有大记录表的插入的更好方法。 我选择一个包含500万条记录的表格并插入另一张表格。

我担心索引导致它变慢。我该怎么做索引?

  1. 丢弃索引 - >选择插入 - >创建索引。
  2. 将索引设置为不可用 - >选择插入 - >重建索引。
  3. 这两种方式是相同的表现吗?或设置不可用更好,因为不需要删除和重新创建,担心丢弃和重新创建也会导致它变慢。

1 个答案:

答案 0 :(得分:2)

绝对选择(2),即无法使用然后重建。性能成本与丢弃和重新创建相同。

否则,您始终存在以下风险:用于重新创建索引的DDL与现有索引的当前DDL不同。例如,它可以是全局分区的,它可以具有基本或高级压缩,它可以具有自定义pctfree设置,它可以存储在特定的表空间中。

我应该注意到,虽然500万行并不是一个巨大的数量,所以你应该将插入的成本与留下的索引进行比较,而不是插入成本然后重建。

例如,带有2个索引的表上的插入在我的笔记本电脑上花费的时间不长

SQL> create table t as
  2  select d.* from dba_objects d,
  3    ( select 1 from dual connect by level <= 100 )
  4  where rownum <= 5000000;

Table created.

SQL>
SQL> create table t1 as select * from t;

Table created.

SQL>
SQL> create index ix1 on t ( owner );

Index created.

SQL> create index ix2 on t ( object_name );

Index created.

SQL>
SQL> set timing on
SQL> insert /*+ APPEND */ into t
  2  select * from t1;

5000000 rows created.

Elapsed: 00:01:19.91