免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3632 | 回复: 4
打印 上一主题 下一主题

全表数据修改问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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


论坛徽章:
0
2 [报告]
发表于 2013-06-24 17:02 |只看该作者
wy94 发表于 2013-06-23 17:11
我有一个200个字段的表base,共200万数据,按id唯一索引,每天晚上备份。现在需要是,其中10个字段需要恢复 ...


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

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2017-04-05 11:23:15
3 [报告]
发表于 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 ...)
     ...
我想这样可能会比你用循环要快一些!


   

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2017-04-05 11:23:15
4 [报告]
发表于 2013-07-31 23:21 |只看该作者
要想速度快一些,可以在做之前把涉及到这10个字段的索引全部删除,更新完后再加上,建索引时可以使用PDQ!

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2017-04-05 11:23:15
5 [报告]
发表于 2013-07-31 23:23 |只看该作者
又想起一点,可以在你新建的表上建一个id与这10个字段的联合索引,这样会少一次读取值的动作,应该会快一些!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP