日期:2014-05-17  浏览次数:21117 次

update语句慢
UPDATE ONE T
   SET T.AGE =
       (SELECT T2.AGE
          FROM TWO T2
         WHERE T2.ID=T.ID
     ); 

ONE TWO 都是2百万级别的数据,update执行起来速度太慢了。有没有好的方法让速度快速提起来。
------解决方案--------------------
ONE TWO 的id都建了索引了吧
------解决方案--------------------
如果id有索引的话, 可以分段update, 不要全表update,那样肯定是慢的。
------解决方案--------------------
1)索引建了吗?
2)控制事务单位,比如2000条update完一个commit
3)用Oracle专用的update也可以考虑:比如对视图的UPDATE语句


------解决方案--------------------
分段来更新这样可以防止死锁
------解决方案--------------------
循环ONE表,在循环体里面按条件一条条更新,5000次commit一下。
------解决方案--------------------
这个操作经常使用还是临时用一次,要是临时,可以创建一个新表,将需要的内容通过INSERT INTO SELECT 的方式添加进去,

要是是经常使用 建议采用 分批提交,可以考虑加上NOLOGGING
------解决方案--------------------
用merge into试试看