我现在有两个表A,B;我想把B表的age记录放在A表的age中,两个表的number相同,我写的程序是
update a set age=(select age from b where b.number=a.number)
我建了两个表测试都成功了的,可是正式运行时我等了一天都没反映,提示都是"正在执行",我的A,B两个表里都有200W条数据,会不会是数据太大了,请教各位高手该什么处理?

解决方案 »

  1.   

    你确定两张表的Number都是有对应关系的?
    还有如果运行了一天没有反映,检查一下Oracle
    的alert文件,看看两张表所属表空间的变化情况,实在不行,考虑把表按照Number大小进行分段Update。
      

  2.   

    我确定两张表的Number都是有对应关系,我从A,B表里分别取出300条记录,建了两个表测试都运行成功了的
      

  3.   

    那就不是程序问题了,性能,调优方面看看,
    运行snap package看看出来的Report.
      

  4.   

    运行snap   package看看出来的Report. ??不太明白,我是个出初手,请指教
      

  5.   

    请问有没别的程序可以解决,
    有两个表A,B;把B表的age记录放在A表的age中,两个表的number相同,
      

  6.   

    在Google里面搜索
    Oracle statspack有很多介绍
      

  7.   

    先看看这个语句的执行计划,b上的number如果没有index,那么对a中的每一条记录都需要全表scan b表,
    那就是200W 次b的全表scan了 update   a   set   age=(select   age   from   b   where   b.number=a.number) 
      

  8.   

    即使200w没有索引也不要那么久吧?
    建议看一下oracle的session管理,看是否有表被锁住,
    或者是前几次执行的时候没有rollback,造成回滚段不够用
      

  9.   

    而且,最让我郁闷的是,在提示"正在执行"时,我查了下CUP的使用率是)%
      

  10.   

    而且,最让我郁闷的是,在提示"正在执行"时,我查了下CUP的使用率是0%
      

  11.   

    我还想了个办法,不用update,先用将A表里age的值全替换成'0',然后用replace把B表的age值换进去,可是也无法实现
      

  12.   

    是否已经对a,b表中的number加入了索引!
      

  13.   

    而且,最让我郁闷的是,在提示"正在执行"时,我查了下CUP的使用率是0%
    ----------------
    是在服务器端执行的,自己机器CPU是零也不奇怪吧?
      

  14.   

    我估计你在等几天吧update table set ...   where很关键的没有写啊