长时间运行UPDATE查询

时间:2015-03-19 09:45:12

标签: sql-server

我想更新表中的某些值,但查询需要两个多小时才会继续运行。我的查询有什么明显的错误吗?

 UPDATE tblQuestionnaires
 SET    nAddBy = ( SELECT   tblanswers.nolduserid
                   FROM     tblAnswers
                   WHERE    tblanswers.strOldMobileModelQuestionairenumber 
                          = tblQuestionnaires.strQuestionnaireCode
                   GROUP BY tblanswers.nolduserid ,
                            tblanswers.strOldMobileModelQuestionairenumber
                 )
 WHERE  tblQuestionnaires.nId BETWEEN 610815 AND 614988 

1 个答案:

答案 0 :(得分:4)

这样做意味着SET子句中的子查询可能正在为每个调查问卷执行。作为一般规则,我喜欢将查询构建为选择,以输出要更新的行的ID,以及您需要的计算值。对于你的情况,它是这样的:

select  q.nId,
        a.nolduserid
    from tblQuestionnaires q
    join tblAnswers a on
        a.strOldMobileModelQuestionairenumber = q.strQuestionnaireCode
    where
        q.nId between 610815 and 614988
    group by a.nolduserid, q.nId

然后将该查询更改为更新:

update q
    set 
        nAddBy = a.nolduserid
    from tblQuestionnaires q
    join tblAnswers a on
        a.strOldMobileModelQuestionairenumber = q.strQuestionnaireCode
    where
        q.nId between 610815 and 614988
    group by a.nolduserid, q.nId

请注意,我还没有对此进行测试(我没有您的数据),但这应该会有所改善。