【Oracle】-【索引】先查数据再建索引,还是先建索引再插数据?

来源:互联网 发布:精功科技 盘古数据 编辑:程序博客网 时间:2024/05/28 05:19

问题:

1、新建一个表结构,创建索引,将百万或千万级的数据使用insert导入该表。
2、新建一个表结构,将百万或千万级的数据使用isnert导入该表,再创建索引。

这两种效率哪个高呢?或者说用时短呢?
我感觉无论先建还是后建索引,当有数据时都需要update索引数据,问题是有索引的情况下插数据与有数据的情况下建立索引,各自的消耗。


实验:

100w记录,

1、先创建表和索引,再插入数据,大约1.3min。
2、先插数据,再建立两个索引,create table xxx as select * from t where 1<>1;大约13秒,建立两个索引大约26秒和35秒。


总结:

如果先建立索引再插入数据,每次插入数据还需要修改索引信息。

实战还要看业务要求,有的业务可能还需要索引和约束对数据进行校验,这样就应该先建立索引了。如果是一次性处理,原则上先插数据后建索引。


另外的问题:

使用nologging可以提高几秒钟,但使用parallel没变化,环境是虚机,4个物理CPU,8个虚拟CPU,这里parallel应该如何设置呢?也请高手指教!

原创粉丝点击