现在有一张表,每天有300万的数据增加,以月为单位进行存储。我有一个功能要对这个表内的数据进行更新,目前测试速度数据量是500万的时候,更新一条需要800多毫秒,已经简直无法忍受,按此速度到月末的时候更是要疯掉了,请问有没有好的建议和方法,多谢。我目前的做法是新增加了一个表,作为其子表,有相同的主键,将原来的更新操作变为插入操作,速度很快,但是感觉这样冗余多了,占用存储的空间也多,对后期数据处理还要进行联合查询也会影响速度。希望各位朋友讨论一下。多谢。

解决方案 »

  1.   

    把update先改为了select 查看一下执行计划!
      

  2.   

    更新一条需要800多毫秒
    查询这条需要多少秒 
    先找出瓶颈 要是查出也是比较慢的话 那应该要用索引 
    要是查询出来比较快 而是写的缘故的话 那就按照5楼的办法 先 disable掉索引 然后更新、
      

  3.   

    能不能尝试优化下更新的SQL呢?
    比如表连接的顺序,where后面条件的顺序等。
      

  4.   

    是不是undo日志太小。DML操作尤其是update生成大量的undo.同时还要维护索引等等,
    set autotrace on 跟踪下到底哪影响效率
      

  5.   

    ---------看这个利用rowid快速在线更新海量数据
    http://www.itpub.net/thread-1052077-1-1.html就能明白你这更新几百万 根本是小case~!
      

  6.   

    同意楼上 用循环 加上 rowid 更新