Oracle append Hint(三)

如果一个表上有索引,那么直接加载又会是什么情况呢?产生的redo量跟传统加载又相差多少呢?例子:

sys@ORCL> create table t   

  2  as

  3  select * from dba_objects where 1=0;

 

Table created.

 

sys@ORCL> create index t_ind on t(object_id);

 

Index created.

 

sys@ORCL> set autotrace trace stat;

 

首先看下传统加载在有索引列产生的redo量

sys@ORCL> insert into t

  2  select * from dba_objects whererownum<10000;

 

9999 rows created.

 

 

Statistics

----------------------------------------------------------

       1067  recursive calls

       1608  db block gets

       2926  consistent gets

         78  physical reads

    1746900 redo size

        918 bytes sent via SQL*Net to client

        973  bytes received via SQL*Net from client

          6  SQL*Net roundtrips to/from client

          1  sorts (memory)

          0  sorts (disk)

       9999  rows processed

 

sys@ORCL> rollback;

 

Rollback complete.

 

再看直接加载在有索引列产生的redo

sys@ORCL> insert/*+append*/ into t

  2  select * from dba_objects whererownum<10000;

 

9999 rows created.

 

 

Statistics

----------------------------------------------------------

         40  recursive calls

        295  db block gets

       2283  consistent gets

         22  physical reads

    1326520 redo size

        903  bytes sent via SQL*Net to client

        987  bytes received via SQL*Net from client

          6  SQL*Net roundtrips to/from client

          2  sorts (memory)

          0  sorts (disk)

       9999  rows processed

 

通过对比可以发现两者相差的redo量并不是很多。因此使用直接加载时,通常是针对非常大的表。如果这些表存在索引,将会带来很大的性能影响,可以考虑将索引disable或者drop掉,然后加载数据,再建立索引。

你可能感兴趣的:(Oracle append Hint(三))