如何提高oracle 插入效率?

timke212004 2012-05-28 04:16:06
求教:
我现在有几十亿的数据条目需要插入数据库,目前没有建索引,使用存储过程。
我在数据库建如下存储过程:
create or replace procedure procedure_insert_001
(
p_sname in varchar2,
p_snum in number,
p_sloc in varchar2
) as
begin
insert into t_costumer(sname,snum,sloc) values(p_sname,p_snum,p_sloc);
commit;
end procedure_insert_001;

然后在vc中,用一个list存储了上万条记录(多次循环),然后call procedure_insert_001(参数1,参数2,参数3);然后执行,excute
大概流程就是这样,但是效率特别低,插入了两三天了,才插入1亿条。
我想问问这是什么原因呢?我该怎么设计呢?谢谢大家。
...全文
1168 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
软件钢琴师 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
引用 11 楼 的回复:
INSERT /*+APPEND*/ INTO
select /* parallel(tablename,4) from tables nologing;


终结
[/Quote]

搞错了 这个
http://www.blogjava.net/19851985lili/articles/110340.html
12 # 终结
软件钢琴师 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
INSERT /*+APPEND*/ INTO
select /* parallel(tablename,4) from tables nologing;
[/Quote]

终结
elhao2011 2012-06-23
  • 打赏
  • 举报
回复
可以写过程批量入库呀!效率会高些...
qiyuming_qi 2012-06-13
  • 打赏
  • 举报
回复
INSERT /*+APPEND*/ INTO
select /* parallel(tablename,4) from tables nologing;
myisfei 2012-06-07
  • 打赏
  • 举报
回复
没见过一条条commit的呢,至少要批量吧,
老黎 2012-06-07
  • 打赏
  • 举报
回复
INSERT /*+APPEND*/ INTO
ray_suen 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

你的几十亿条记录是存在os文件中的吧,然后用vc的list(你指的是list控件?还是STL的list?)
用VC去读OS的文件即使你的内存很大,但是依然会比较慢,因为这是多次IO操作,然后你再插入数据库,我觉得也会很慢。而且一条一条的插入数据确实不如批量插入数据快啊。

如果真的是几十亿条记录在os文件中,推荐还是sql*loader吧。
你可以把大文件转储成一个个的小文件,然后并行插……
[/Quote]
楼上正解
但是如果你喜欢用手写Insert,建议使用hints方式并行插入把
siriusraider 2012-06-05
  • 打赏
  • 举报
回复
你的几十亿条记录是存在os文件中的吧,然后用vc的list(你指的是list控件?还是STL的list?)
用VC去读OS的文件即使你的内存很大,但是依然会比较慢,因为这是多次IO操作,然后你再插入数据库,我觉得也会很慢。而且一条一条的插入数据确实不如批量插入数据快啊。

如果真的是几十亿条记录在os文件中,推荐还是sql*loader吧。
你可以把大文件转储成一个个的小文件,然后并行插入,估计会好很多。
不过我没试过在vc里面调用sqlloader,但是用system('')应该也行吧
bayueguihuaxiang 2012-05-29
  • 打赏
  • 举报
回复
使用sql*loader可以
使用外部表也是一种不错的选择
DannyHau 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

我现在有几十亿的数据条目需要插入数据库

------什么格式的数据?一条一条的插入肯定不行,至少有批量的方法

可以采取导入,SQLLOAD,等等实现
[/Quote]

sqlloader
youqi1984 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

我现在有几十亿的数据条目需要插入数据库

------什么格式的数据?一条一条的插入肯定不行,至少有批量的方法

可以采取导入,SQLLOAD,等等实现
[/Quote]
支持
秋雨飘落 2012-05-29
  • 打赏
  • 举报
回复
我现在有几十亿的数据条目需要插入数据库

------什么格式的数据?一条一条的插入肯定不行,至少有批量的方法

可以采取导入,SQLLOAD,等等实现
for_a_name 2012-05-28
  • 打赏
  • 举报
回复
单纯的入库吗?不做处理,直接录入?
对于数据量大的表,可以用 并行
a494910091 2012-05-28
  • 打赏
  • 举报
回复
没做过。不过看你这种方法也是不可取的!
首先找到你程序的瓶颈在哪 (是插入的时候慢、还是读取数据源的时候慢)?

如果像你说的 list 里面存到上万条记录,你岂不是要调用 上万次存储过程?
至少这里可以这么做:
利用PreparedStatemnet 的addBatch 然后设定次数 execute 、commit.

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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