如何调整以下UPDATE
声明?
数据库表中有3000000行,当我执行UPDATE
语句时,它将永远运行。我从过去17个小时开始运行此查询,但没有看到结果。但是当我执行select
语句时,它只需要2分36秒。
q是事实表,而a是维度表。
UPDATE q
SET q.[DID] = a.[DID]
FROM [dbo].[CallDetail] q
JOIN [DimSchart] a ON a.[Schart] = q.[Schart]
WHERE q.[DID] IS NULL;
GO
答案 0 :(得分:1)
使用表CallDetail和DID字段的pk字段创建一个临时表。
在此表中插入一个SELECT查询,该查询从DimSchart获取CallDetails pk字段和DID。
从临时表中更新CallDetail。
编辑(添加代码):
CREATE TABLE #tmpCallDetailUpdate(CallDetailID int, DID int);
INSERT INTO #tmpCallDetailUpdate(CallDetailID, DID)
select q.CallDetailID, a.DID
FROM CallDetail q
JOIN DimSchart a ON a.Schart = q.Schart
WHERE q.DID IS NULL;
UPDATE CallDetail q
SET q.DID = u.DID
FROM #tmpCallDetailUpdate u
WHERE u.CallDetailID = q.CallDetailID;
(假设您的CallDetail表中有一列CallDetailID;如果没有,请替换表中的PK。)