如何提高存储过程批量插入及更新数据的性能
月球探测器 2008-12-10 09:32:19 有一个存储过程专门用来从另外一个数据结果表(tab_result)中提取记录并插入到记录详细表(tab_detail)中,如果原来的记录已存在tab_detail中,则更新该记录.
举例说明:
数据结果表tab_result记录如下:
create tab_result
( sn number,--自动增长的数值
callid number, -- callid可能有重复的记录
tdata number(12),
xdata varchar2(10)
);
alter table tab_result add index idx_result on (sn);
sn callid tdata xdata
-----------------------------
1 101 223 xxxs
2 232 232 sdfd
3 351 323 232x
4 101 343 3dfdf
记录详细表(tab_detail)结构如下:
create table tab_detail
( callid number, --来源于tab_result中的callid
sdata1 number(12),-- sdata1 = tab_result.tdata+tab_result.callid
sdata2 number(12),--sdata2 = tab_result.tdata * 100 +tab_result.callid
xxdata varchar2(10) --xxdata = tab_result.xdata+tab_result.tdata
);
alter table tab_detail add index idx_callid on tab_detail(callid);
现在tab_result中有1000W条记录,需要根据一些变换后插入或更新到tab_detail中去.
目前我是用一个大的循环来实现的,循环里面用游标来获取每一行数据再判断tab_detail中时候已存在callid的记录,不存在,则直接插入;已存在则更新到该条callid记录中.但是执行的效率太低,每秒生成100条左右的tab_detail记录.大家帮忙看看有没有好的办法可以优化一下,提高Insert和Update的性能??