标题:关于oracle存储过程全表扫描处理百万数据的速度问题
只看楼主
xzzhangzhao
Rank: 1
来 自:石家庄
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-7-13
 问题点数:0 回复次数:0 
关于oracle存储过程全表扫描处理百万数据的速度问题
今天做数据处理的时候遇到一个问题,就是要把一个表A中的某个字段的数据经过处理以后再插入到表B中。一开始用到的是游标,不过最后发现速度跟本不行,执行半天还没完。。。
A表中有800万数据。
具体的逻辑是这样的,就是A表中有一个字段type,这个type中有多个值,其中是以,号隔开的。比如:010,030,020.
现在的情况是我要把A表中的type字段中的值拿出来然后以,号隔开,变成010  030 020 三个值,然后作为三条记录放到表B的字段type 中。在B表中记录会是这样
id  type
1    010
2    030
3    020
三条记录。
存储过程是这样
程序代码:
type cur is ref cursor

v_resultset cur;
v_resultset1 cur;
v_type varchar2(10);
v_type2 varchar2(30);
open  v_resultset for select type from A;
loop
fetch v_resultset into v_type;
    open resultset1 for select * from table( split(v_type,','));--split是自己写的函数,分隔字符串后得到的是一个集合,还得循环。。。
    loop
       fetch resultset1 into v_type2;
        insert into B values(v_type2);
        close resutlset1;
      end loop;
      close resultset2;
end loop;
commit;
exception
  处理

就是这样,速度异常的慢。不过小北刚接触oracle存储过程,不知道有没有其它的好的实现方式。先谢谢大家了。像上面这个是循环套循环,速度一定会慢的。但是自己实在是想不到有没有更好的解决办法了。希望有经验的大大们不吝赐教!先谢谢了
搜索更多相关主题的帖子: oracle 
2011-07-13 09:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-345381-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020857 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved