需要改进以下UPDATE SQL语句或重写,以便更快地执行

时间:2015-10-01 14:52:05

标签: sql sql-server sql-server-2008 ssis-2012 ssas-2012

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

1 个答案:

答案 0 :(得分:1)

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

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

  3. 从临时表中更新CallDetail。

  4. 编辑(添加代码):

    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。)