如何知道哪一个是选择带有大记录表的插入的更好方法。 我选择一个包含500万条记录的表格并插入另一张表格。
我担心索引导致它变慢。我该怎么做索引?
这两种方式是相同的表现吗?或设置不可用更好,因为不需要删除和重新创建,担心丢弃和重新创建也会导致它变慢。
答案 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