海量数据插入的各种方案试验,大家来分析下
源表:一千万条以上记录,54个字段.exp导出文件2.8G以上。
目的表:无索引,空表
试验:A.本地插入。B.跨库插入
SQL> select count(*) from A;
COUNT(*)
--------------------
11387512
已用时间: 00: 00: 47.08
SQL> create table test as select * from A where 1<0; --(无索引)
表已创建。
已用时间: 00: 00: 00.02
SQL> alter table test move tablespace mydata;
表已更改。
已用时间: 00: 00: 00.00
默认表空间太小。
SQL> insert into test select * from A;
已创建11387512行。
已用时间: 00: 07: 22.02
SQL> insert into test NOLOGGING select * from A;
已创建11387512行。
已用时间: 00: 07: 18.01
SQL> insert /* +append*/into test nologging select * from A;
已创建11387512行。
已用时间: 00: 07: 29.04
爆慢,等了一个小时以上,把进程关了。(当时看见进程在“锁”中,不知为何,我菜,不懂)
SQL> insert into test select * from A@ora1;
已创建11840772行。
已用时间: 00: 15: 29.09
SQL> insert into test nologing select * from A@ora1;
(nologing和nologging有区别吗?)
已创建11840772行。
已用时间: 00: 14: 15.01
SQL> insert /* +append*/into test nologing select * from A@ora1;
已创建11840772行。
已用时间: 00: 14: 17.01
另外,有人说是nologing,有人说是nologging,昏了,再做了次
SQL> insert /* +append*/into test nologging select * from A@ora1;
已创建11840772行。
已用时间: 00: 14: 12.05
- set copycommit 1;
- set arraysize 5000;
- copy from scott/tiger@ora1 -
- insert test -
- using -
- select * from A;
耗时两小时+,昏了。
更爆慢,耗时5小时+,没等出结果直接取消了,浪费了一个下午+半个早上。不过当时imp时test表是有索引的,没有删除!,也是远程imp,还要考虑网络问题。