0

如何调整以下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
4

1 回答 1

1
  1. 使用表 CallDetail 的 pk 字段和 DID 字段创建一个临时表。

  2. 在此表中插入一个 SELECT 查询,该查询从 DimSchart 获取 CallDetails pk 字段和 DID。

  3. 从临时表中更新 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。)

于 2015-10-01T16:44:47.417 回答