如  有 表1update  表1 set   字段a=ceiling(rand()*10000)
update  表1 set   字段a=字段b 
有20万条数据,那么执行时间为3分钟,问题有很多这样的表,执行起来,就要花很多时间,,有不有其它的语句替代,或者说用储存过程?

解决方案 »

  1.   

    没有什么更好的办法。 你的UPDATE语句没有任何条件限制,需要全表处理,所以 不管是存储过程还是其它语句在时间上很难优化。速度慢的原因可能是不是有其它进程也在同时读表?减少其它连接用户。
      

  2.   

    7.2.17. UPDATE语句的速度
    更新查询的优化同SELECT查询一样,需要额外的写开销。写速度依赖于更新的数据大小和更新的索引的数量。没有更改的索引不被更新。使更改更快的另一个方法是推迟更改然后在一行内进行多次更新。如果锁定表,同时做多个更新比一次做一个快得多。请注意对使用动态记录格式的MyISAM表,更新一个较长总长的记录可能会切分记录。如果经常这样该,偶尔使用OPTIMIZE TABLE很重要。参见13.5.2.5节,“OPTIMIZE TABLE语法”。
      

  3.   

    update 表1 set 字段a=ceiling(rand()*10000)
    你自己可以看下执行这段时间时你的服务器cpu使用情况,猜测应该是比较高的