请教对数十亿条数据的表更新字段值的解决思路

duset 2008-11-10 05:47:30
首先有一个表Login_Detail记载了详细登录信息
该表已经按日期分区(每一个月一个分区),总共大概有40多亿行
(日期是已char(8)格式存储的,如:20081110)
在Userid,logdate上都建有索引


CREATE TABLE [dbo].Login_Detail(
[auto_no] [bigint] IDENTITY(1,1) NOT NULL,
[userid] [varchar](50) NOT NULL,
[logdate] [char](8) NOT NULL
) ON [ps_logdate]([logdate])

CREATE CLUSTERED INDEX [index_login_logdate] ON [dbo].Login_Detail
(
[logdate] ASC
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF)
ON [ps_logdate]([logdate])

CREATE NONCLUSTERED INDEX [index_login_userid] ON [dbo].login
(
[userid] ASC
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF)
ON [ps_logdate]([logdate])




还有一个表Login_Item,记载的是每个Userid的最小和最大登录日期.
该表是Userid分区的,大概就是每个字母一个分区吧
该表的数据有1亿多行

现在在该表上新增一字段lastdate,就是据最大登录日期的上一次登录日期,
要将值为null的记录根据 Login_Detail 表里的数据更新一下
null值记录大概6000W行


CREATE TABLE [dbo].login_item(
[userid] [varchar](50) NOT NULL,
[mindate] [char](8) NULL,
[maxdate] [char](8) NULL,
[lastdate] [char](8) NULL
) ON [psc_userid]([userid])


如果直接update的话,感觉效率应该会很慢,


UPDATE dbo.login_item
SET [lastdate] = (
SELECT TOP 1 log_datetime FROM
dbo.Login_Detail a WITH(NOLOCK)
WHERE log_datetime BETWEEN login_item.mindate
AND CONVERT(CHAR(8),DATEADD(d,-1,login_item.[maxdate]),112)
AND a.[USER_ID] = login_item.[USER_ID]
ORDER BY log_datetime DESC
)

6000W的数据的话,能控制在20个小时内应该很好了,那要平均每秒处理1000+行数据,
处理这种级别数据的经验太少了,实在没什么头绪,
希望对大容量数据操作有经验的前辈能否指点一下思路
...全文
125 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dobear_0922 2008-11-12
  • 打赏
  • 举报
回复
(日期是已char(8)格式存储的,如:20081110)

---------------
为什么不用Datetime或SmallDatetime呢?

同意FC的分批次执行。
claro 2008-11-12
  • 打赏
  • 举报
回复
帮顶
Novelty 2008-11-12
  • 打赏
  • 举报
回复
关注
新鲜鱼排 2008-11-12
  • 打赏
  • 举报
回复
做一个Job,晚上运行。
tianhuo_soft 2008-11-11
  • 打赏
  • 举报
回复
每个月40多亿行?

那就按星期吧

华为的短信系统是按天分~!
fcuandy 2008-11-10
  • 打赏
  • 举报
回复
可以考滤分批执行,执行多次。
duset 2008-11-10
  • 打赏
  • 举报
回复
补充一下

Login_Detail的索引不能改


Login_Item的索引可以任意修改

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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