需要每天对全量表进行一次全量处理,根据某字段取值的不同,逐条对记录进行处理(关联其他表),各条记录之间均不存在耦合,完全独立,可并行处理目前采用的自定义存储过程,建立游标,loop循环处理,按理说这就是完全单条处理吧?效率不是很满意,1000万级别数据需要40分钟时间,怎么优化?看了下bulk collect,没怎么明白,哪位有相关的经验,帮忙解解惑谢谢基本机构是
cursor 
     select ...
beginopen
loop
    begin
      fetch
        into 
      exit when 

解决方案 »

  1.   


    代码逻辑很简单,就是数据分为3类,标识分为ABC,每条均做以下处理
    如果标识为A,则去另一张表1做查询后,update该条数据的某个字段
    如果标识为B,则去表2做查询后,update该条数据的某个字段
    如果标志为C,则不做任何处理
      

  2.   

    感觉这个需求不用游标更合适update 表 set 某个字段=(select ... from 表1 where 关联条件) where 标识='A';
    update 表 set 某个字段=(select ... from 表2 where 关联条件) where 标识='B';表数据量较大,一次update可能会耗费非常大的时间。可以分批执行,例如如果表里有个id字段
    update 表 set 某个字段=
    case when 标识='A' then (select ... from 表1 where 关联条件) 
    when 标识='B' then (select ... from 表2 where 关联条件) end
    where 标识 in ('A','B')
    and id>=起始id and id<截止id
    ;一次更新1000条,性能大概会好一些
    也可以用其他选择性较好且带有索引的字段来代替ID写成存储过程,1次更新若干条,循环更新全表