wy94 发表于 2013-06-23 17:11

全表数据修改问题

我有一个200个字段的表base,共200万数据,按id唯一索引,每天晚上备份。现在需要是,其中10个字段需要恢复到2天前去,在修改时停业务。请问如何最快:

我现在的方法是: 将id及10个字段从2天前得备份中分离出来。建新表baseupd导入数据库;然后直接foreach....

foreach select id,f1,f2,f3,f4,f5...    into _id,_f1......from baseupd
   update base
      set f1=_f1, f2=_f2......
    where id=_id
end foreach


3sane 发表于 2013-06-24 17:02

wy94 发表于 2013-06-23 17:11 static/image/common/back.gif
我有一个200个字段的表base,共200万数据,按id唯一索引,每天晚上备份。现在需要是,其中10个字段需要恢复 ...

备份的时候保留2天前数据,然后用视图试试?考虑ROWSIZE和时效性,视图能减少日志和刷新操作,只是需要你的应用要配合,而不是你人工刷新控制了。

yunzhongyue 发表于 2013-07-31 23:19

回复 1# wy94
按你这种思路也是可以的,不过不需要用循环的,一条SQL语句就可以了:
update table_a
set a=(select a from table_b where table_a.id=table_b.id),
   b=(select b from table_b ...)
   ...
我想这样可能会比你用循环要快一些!


   

yunzhongyue 发表于 2013-07-31 23:21

要想速度快一些,可以在做之前把涉及到这10个字段的索引全部删除,更新完后再加上,建索引时可以使用PDQ!

yunzhongyue 发表于 2013-07-31 23:23

又想起一点,可以在你新建的表上建一个id与这10个字段的联合索引,这样会少一次读取值的动作,应该会快一些!
页: [1]
查看完整版本: 全表数据修改问题