海量数据插入的各种方案试验

海量数据插入的各种方案试验,大家来分析下


前提


        源表:一千万条以上记录,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
默认表空间太小。

A.本地插入

1。直接insert into
SQL> insert into test select * from A;

已创建11387512行。

已用时间:  00: 07: 22.02


2。nologing

SQL> insert into test NOLOGGING select * from A;

已创建11387512行。

已用时间:  00: 07: 18.01


3。append参数

SQL> insert /* +append*/into test nologging select * from A;

已创建11387512行。

已用时间:  00: 07: 29.04


4。copy命令


爆慢,等了一个小时以上,把进程关了。(当时看见进程在“锁”中,不知为何,我菜,不懂)

B.跨库插入

1。直接insert into
SQL> insert into test select * from A@ora1;

已创建11840772行。

已用时间:  00: 15: 29.09


2。nologing
SQL> insert into test nologing select * from A@ora1;


(nologing和nologging有区别吗?)

已创建11840772行。

已用时间:  00: 14: 15.01


3。append参数
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


4。copy命令
set copycommit 1;
set arraysize 5000;
copy from scott/tiger@ora1 -
insert test -
using -
select * from A;


耗时两小时+,昏了。


5。imp导入

更爆慢,耗时5小时+,没等出结果直接取消了,浪费了一个下午+半个早上。不过当时imp时test表是有索引的,没有删除!,也是远程imp,还要考虑网络问题。

你可能感兴趣的:(数据库,数据库,sql,海量数据)