全表数据修改问题
我有一个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
wy94 发表于 2013-06-23 17:11 static/image/common/back.gif
我有一个200个字段的表base,共200万数据,按id唯一索引,每天晚上备份。现在需要是,其中10个字段需要恢复 ...
备份的时候保留2天前数据,然后用视图试试?考虑ROWSIZE和时效性,视图能减少日志和刷新操作,只是需要你的应用要配合,而不是你人工刷新控制了。 回复 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 ...)
...
我想这样可能会比你用循环要快一些!
要想速度快一些,可以在做之前把涉及到这10个字段的索引全部删除,更新完后再加上,建索引时可以使用PDQ! 又想起一点,可以在你新建的表上建一个id与这10个字段的联合索引,这样会少一次读取值的动作,应该会快一些!
页:
[1]