加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在十分钟内插入1亿条记录到Oracle数据库?

发布时间:2020-12-12 16:31:08 所属栏目:百科 来源:网络整理
导读:这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能。 -- Create table create table TMP_TEST_CHAS_LEE ( f01 VARCHAR2(20), f02 NUMBER(10) not null,sans-serif; font-size:13px; line-height:19.5px"> f03 VARCHAR2(21),sans-serif;

这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能。

-- Create table

create table TMP_TEST_CHAS_LEE

(

f01 VARCHAR2(20),

f02 NUMBER(10) not null,sans-serif; font-size:13px; line-height:19.5px"> f03 VARCHAR2(21),sans-serif; font-size:13px; line-height:19.5px"> f04 VARCHAR2(21),sans-serif; font-size:13px; line-height:19.5px"> f05 NUMBER,sans-serif; font-size:13px; line-height:19.5px"> f06 NUMBER(20)

);

--创建一个临时表,用于提供序列号

CREATE GLOBAL TEMPORARY table t_sequence_num(

sequenceNum number(8) not null

)

ON COMMIT PRESERVE ROWS;

--开始插入数据

begin

--先生成1万个序号

delete from t_sequence_num;

for i in 0..9999 loop

insert into t_sequence_num(sequenceNum) values(i);

end loop;

--使用APPEND提示,每次1万条,进行数据插入

for i in 1..10 loop

insert /*+ append */ into TMP_TEST_CHAS_LEE

(f01,f02,f03,f04,f05,f06)

select

8613800000000 + i * 10000 + t_sequence_num.sequencenum as MSISDN,sans-serif; font-size:13px; line-height:19.5px"> '12106000',sans-serif; font-size:13px; line-height:19.5px"> 0,sans-serif; font-size:13px; line-height:19.5px"> '20120312072000',sans-serif; font-size:13px; line-height:19.5px"> '500231891000',sans-serif; font-size:13px; line-height:19.5px"> null

from t_sequence_num;

--每批次必须要提交一次

commit;

end;

/

可以看出,这种方法的关键是使用了 APPEND 提示,也就是使用了 Direct Path Insert. 效果非常惊人,上亿的数据,十分钟左右就搞定了,也就是说,每秒钟插入了超过10万条以上的记录。 这个方法很简单,就是要利用 APPEND提示,方法就是需要有个序列表,来辅助数据生成。 性能测试人员不用耗费大量的时间来等待测试数据生成了。 需要注意的问题: 1. 插入数据时,表上不要建立索引 2. 可以在数据插入完毕后,通过 nologging 和 parallel 来创建索引 3. 这里默认是1万条记录提交一次,可以改的更大,应该会更快
4. APPEND方式插入数据后,必须要提交后才能对表进行其它操作 5. 生成的数据的每个字段都是可以根据自己的需要灵活产生的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读