大数据量的Update操作

Twitter 2008-04-08 01:43:27
现在有Table1(4千万条记录)和Table2(5百万条记录)
我需要对Table1做Update操作,更新的数据源来自Table2

也就是想要实现下面的操作
    Update Table1 Set Subject = a.Subject From
( Select ID,Subject from Table2 ) as b
Where Table1.ID = b.ID

如果单独执行上面的语句,将会是一个漫长而痛苦的过程。

现在想请教各位,有没有什么好的办法解决这个问题。
...全文
741 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Twitter 2008-05-12
  • 打赏
  • 举报
回复
我的做法,在Table2上建立了一个新的字段RowNumber
然后每次根据RowNumber的范围来作循环更新

Declare @i int 
Set @i = 1

While(@i < 10)
Begin
Update Table1 Set Subject = a.Subject From
Table1 as xx ,Table2 as a
Where xx.ID = a.ID
and xx.ID is null
and a.RowNumber >= (500000 * @i + 1) and a.RowNumber<= ( 500000 * (@i + 1 ))

Set @i = @i + 1
End
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
什么呀
zanyzyg 2008-04-09
  • 打赏
  • 举报
回复


Select ID,Subject from Table2

应该是你这显示500万记录慢吧?

2楼说的,应该不慢吧?
fcuandy 2008-04-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jinjazz 的回复:]
SQL codeupdate table 1 set Subject =b.Subject from table1 a,table2 b
where a.id=b.id



a.id和b.id都添加索引,应该不会很慢
[/Quote]

没什么好办法了.

如果实在还是太慢,那么建议分批执行.

比如b表500w条,分5次.

where a.id=b.id and b.id between 0 and 1000000
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jinjazz 的回复:]
SQL codeupdate table 1 set Subject =b.Subject from table1 a,table2 b
where a.id=b.id



a.id和b.id都添加索引,应该不会很慢
[/Quote]

这些效果不好吧,from table1 a,table2 b对两个表坐一个笛卡尔集的话要多少行呢?
觉得lz的还能快一点。另外就是在两个主键上都建立索引吧
sinxy 2008-04-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qiyousyc 的回复:]
Update Table1 Set Subject = b.Subject From
( Select ID,Subject from Table2 where id in (select ID from table1) as b
Where Table1.ID = b.ID

上面的语句要保证Table2的ID,Subject 是一一对应的。
[/Quote]表的对应关系是Table1中的多条记录 可能对应 Table2中的一条记录
flairsky 2008-04-08
  • 打赏
  • 举报
回复
这么大数据量一次update?

我想说也许你的设计有问题……
shirely 2008-04-08
  • 打赏
  • 举报
回复
没什么好办法哦,我也偶尔要做这样的操作,,,可以按什么分成几部分,这样做比较快点,比如按 年,,,月 什么的
sinxy 2008-04-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 utpcb 的回复:]
还有阿你怎么一下要更新那么多阿!

能不能想办法相对减少更新的数据呢!

如果看样子不能再优化了
[/Quote]在做数据的迁移 所以需要更新那么多数据
utpcb 2008-04-08
  • 打赏
  • 举报
回复
还有阿你怎么一下要更新那么多阿!

能不能想办法相对减少更新的数据呢!

如果看样子不能再优化了
qiyousyc 2008-04-08
  • 打赏
  • 举报
回复
Update Table1 Set Subject = b.Subject From
( Select ID,Subject from Table2 where id in (select ID from table1) as b
Where Table1.ID = b.ID

上面的语句要保证Table2的ID,Subject 是一一对应的。
deleteall8 2008-04-08
  • 打赏
  • 举报
回复
    Update Table1 Set Subject = Table2.Subject 
from Table2
Where Table1.ID = Table2.ID
pt1314917 2008-04-08
  • 打赏
  • 举报
回复

Update Table1 Set Subject = b.Subject From
table1 a,table2 b
Where a.ID = b.ID

laowan688 2008-04-08
  • 打赏
  • 举报
回复
个人认为没有其他更好的办法了。
jinjazz 2008-04-08
  • 打赏
  • 举报
回复
update table 1 set Subject =b.Subject from table1 a,table2 b
where a.id=b.id


a.id和b.id都添加索引,应该不会很慢
laowan688 2008-04-08
  • 打赏
  • 举报
回复
帮顶下先

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧