每张表大概有200万数据,现在要把中间几个属性在原来的基础上加2,直接用update 表名 set 属性值= 属性值+ 2   运行速度太慢了。有没有更加优化的方法?

解决方案 »

  1.   

    可以试下,create table as select...插入临时表,然后truncate原表,再插入回来 insert into...select...
      

  2.   

    临时表插入原表中的记录,然后插入增加的属性值,然后用select sum() ..from ... group by ..
      

  3.   


    那增加的属性值里面如果有date类型怎么办?sum是不是不能对date对象进行操作?
      

  4.   

    建议分批循环更新,避免锁表,占用大量UNDO。
      

  5.   


    那增加的属性值里面如果有date类型怎么办?sum是不是不能对date对象进行操作?
    date类型就不行了,sum只能对数值使用
      

  6.   

    重新建表的方式是最快的!
    1、全表备份--》
    2、Create Table TableName1  nologging As Select ....--》
    3、删除源表Drop Table TableName Purge--》
    4、Rename TableName1 To  TableName
    有授权信息、索引、备注等等的,预先收集存储好,重建表后再重建索引、重新授权、重建备注等等!数据量大的,Update非常慢,重建表速度是最快的!
      

  7.   

    全表扫描少不了。可以找出该SQL语句的sql_id,在v$active_session_history中查看该语句执行的过程,关注event,看看时间花在了什么地方