表A   id ,usedspace
表B   resourceId,filesize条件 表A.id = 表B.resourceId符合条件的表B可能有多条数据也可能是0条数据现在要把 符合条件的表B中的fileSize 更新到 表A的 usedspace字段中
之前的脚本在几万条数据的时候还好用,但是数据一上了几十万上百万的时候就发生死锁,请问怎么处理啊。这种批量的更新用什么方式效率会高?  小白一个,麻烦大神们多写点。。

解决方案 »

  1.   

    还是要从需求着手。
    更新的频率要求是什么,多长时间更新一次。
    b表的filesize多长时间变化一次。
      

  2.   

    b表的filesize变化时间不定,只在晚上做一次清算就好了
      

  3.   

    可以考虑利用 ROWID从B表批量(一次10000)取值更新A表
      

  4.   

    小白前来学习看楼主的字段 A表是用户ID和已用空间 B表是用户资源ID和文件大小每天需要结算用户当天用了多少空间大小 隔天显示出用户已用的空间 业务逻辑是这样嘛?我觉得先对B表进行批量分组计算  然后再和A表关联计算比较合理 因为估计你们用户也不会有几百万 而用户的操作记录 即B表几百万条吧...
      

  5.   

    楼主如果使用普通UPDATE更新,建议不要采用,可以使用merge,如果不是生产环境可以建立一个中间表再使用merge
      

  6.   

    先建一个临时表t1,将2个表关联的结果写入临时表t1,truncate 源表,才从t1insert回来。
      

  7.   

    不知道你这个语句怎么写的,有没有考虑使用oracle 的merge语法?
    merge into AA
    using(select bb.resourceid,bb.filesize from BB) s
    on (aa.id = s.resourceid)
    when matched then 
      update set aa.usedspace = s.filesize;
    commit;用merge的话,应该百万也不至于死锁吧。速度还挺快的。弄个测试环境用实际数据测试下。