怎样快速插入大量数据

李敏910 2008-12-21 03:36:45
我想在机子上插入大量(10-100W条)数据玩玩,可惜写的代码每次运行的时候都卡住了,最后都无法提交。哪位达人给个优化过的代码呢?
我机子以前用sql2000插入过100多W条数据,我想用oracle也试试。
...全文
311 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxu_hust 2008-12-22
  • 打赏
  • 举报
回复
学习
孑冰 2008-12-22
  • 打赏
  • 举报
回复
没这样试过,但是,对效率上有什么影响呀
fuyou001 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vc555 的回复:]
insert /*+ append */ into t
[/Quote]
这样是不是没redo和undo了
jinjazz 2008-12-22
  • 打赏
  • 举报
回复
sqlldr 插入100万数据很快的。
xingkongmori 2008-12-22
  • 打赏
  • 举报
回复
看不懂
w7210982 2008-12-22
  • 打赏
  • 举报
回复
写个过程,偶一下插了3000W花了40分钟,100W估计两分钟能搞定:
set serveroutput on
declare
tt constant int:=30000;
i int:=1;
j int:=1;
k int:=1;
n int:=1;
m int:=1;
begin
for i in 1..tt loop
loop
loop
insert into ayss.HistDataT ("DT","STATEID","OBJID","OBJTYPE","VAL")
values(To_char(To_date('2008-08-26 00:00:00','YYYY-MM-DD HH24:MI:SS')+m*(300/(24*60*60))),k,n,0,m);
if n>99 then
n:=1;
exit;
end if;
n:=n+1;
end loop;
if k>9 then
k:=1;
exit;
end if;
k:=k+1;
end loop;
m:=m+1;
end loop;
commit;
end;
/
自己看着改下吧
hugh_9 2008-12-21
  • 打赏
  • 举报
回复
---可以1000条提交一次
DECLARE
CURSOR C_A IS SELECT * FROM TABLE_A;
TYPE BB IS RECORD(..);
BEGIN
OPEN C_A;
LOOP
FETCH C_A BULK COLLECT
INTO BB LIMIT 1000;
FOR I IN 1 .. BB.COUNT LOOP
INSERT INTO TABLE_B
VALUES(BB.col1,bb.col2,..) ;
END LOOP;
COMMIT;
EXIT WHEN C_A%NOTFOUND;
END LOOP;
END;
--还可以将TABLE_A分区,分为10个或者50个小表,然后并发执行,相当快
李敏910 2008-12-21
  • 打赏
  • 举报
回复
ls说的批量提交是怎么实现的呢?我使用的是loop循环提交的,一次提交10W条,结果机子卡住了,最后一条也没提交上去。
我对ora的了解只是停留在基础层。哪位能给段源码呢?不胜感激~~~
jdsnhan 2008-12-21
  • 打赏
  • 举报
回复
从文件中插入,可以考虑用sqlldr
从表中插入,可以用楼上两位提供的方法。
另,正常的insert的时候,要注意批量递交,比说说1000条递交一次
yinzeng_y 2008-12-21
  • 打赏
  • 举报
回复
append 这个东西确实快
它是把数据插入到表的后面,使用连续的未使用的块。配合nologging会更快,
vc555 2008-12-21
  • 打赏
  • 举报
回复
insert /*+ append */ into t

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧