视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle-insert性能优化
2020-11-09 10:47:19 责编:小采
文档


看见朋友导入数据,花了很长时间都没完成!其实有很多快速的方法,整理下! 向表中插入数据有很多办法,但是方法不同,性能差别很

看见朋友导入数据,,花了很长时间都没完成!其实有很多快速的方法,整理下!

向表中插入数据有很多办法,但是方法不同,性能差别很大.


----1.原始语句
drop table t1 purge;

create table t1
(
sid number,
sname varchar2(20)
) tablespace test;

create or replace procedure proc01
(
sname varchar2
)
as
begin
for i in 1..10000000
loop
execute immediate
'insert into t1(sid,sname) values('||i||','''||sname||''')';
commit;
end loop;
end;
/

alter system flush shared_pool;

set timing on;

exec proc01('ocpyangtest');

已用时间: 02: 02: 54.12

----2.绑定变量

drop table t1 purge;

create table t1
(
sid number,
sname varchar2(20)
) tablespace test;


create or replace procedure proc02
(
sname varchar2
)
as
begin
for i in 1..10000000
loop
execute immediate
'insert into t1(sid,sname) values(:no'||','''||sname||''')' using i;
commit;
end loop;
end;
/

alter system flush shared_pool;

set timing on;

exec proc02('ocpyangtest');

已用时间: 00: 22: 59.79


select count(*) from t1;


----3.静态语句

drop table t1 purge;

create table t1
(
sid number,
sname varchar2(20)
) tablespace test;


create or replace procedure proc03
as
begin
for i in 1..10000000
loop

insert into t1 values(i,'ocpyangtest');
commit;
end loop;
end;
/

alter system flush shared_pool;

set timing on;

exec proc03;

已用时间: 00: 20: 42.42

select count(*) from t1;


----4.批量提交


drop table t1 purge;

create table t1
(
sid number,
sname varchar2(20)
) tablespace test;


create or replace procedure proc04
as
begin
for i in 1..10000000
loop
insert into t1 values(i,'ocpyangtest');
end loop;
commit;
end;
/


alter system flush shared_pool;

set timing on;

exec proc04;

已用时间: 00: 11: 48.42

----5.集合


drop table t2 purge;

create table t2
(
sid number,
sname varchar2(20)
) tablespace test;


alter system flush shared_pool;

select count(*) from t1;


set timing on;

insert into t2 select sid,sname from t1;


已用时间: 00: 01: 02.18

commit;


select count(*) from t2;

----6. 集合+append


drop table t2 purge;

create table t2
(
sid number,
sname varchar2(20)
) tablespace test;


alter system flush shared_pool;


select count(*) from t1;

set timing on;

insert /* + append */ into t2 select sid,sname from t1;

已用时间: 00: 00: 36.94


commit;


select count(*) from t2;


----7. 集合+append+nologging


drop table t2 purge;

create table t2
(
sid number,
sname varchar2(20)
) nologging tablespace test;


alter system flush shared_pool;


select count(*) from t1;


set timing on;


insert /* + append */ into t2 select sid ,sname from t1;

已用时间: 00: 00: 35.07

commit;


select count(*) from t2;


----8.数据加载1


drop table t2 purge;

alter system flush shared_pool;

select count(*) from t1;

set timing on;

create table t2
as
select sid,sname from t1;

已用时间: 00: 00: 25.91

select count(*) from t2;


----9.数据加载2


drop table t2 purge;


alter system flush shared_pool;

select count(*) from t1;

set timing on;

create table t2 nologging
as
select sid,sname from t1;

已用时间: 00: 00: 04.

select count(*) from t2;

----10.数据加载+并行


drop table t2 purge;


alter system flush shared_pool;

select count(*) from t1;

set timing on;

create table t2 nologging parallel 24 --根据自己服务器情况
as
select sid,sname from t1;

已用时间: 00: 00: 02.


select count(*) from t2;

下载本文
显示全文
专题