关于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存储过程,不知道有没有其它的好的实现方式。先谢谢大家了。像上面这个是循环套循环,速度一定会慢的。但是自己实在是想不到有没有更好的解决办法了。希望有经验的大大们不吝赐教!先谢谢了