帮助需要的SQL - 解析2 Lac +记录

时间:2011-08-01 11:48:09

标签: sql sql-server-2008

我有一个包含200.000+条记录的Customer表,我必须循环查看条件(在特定列上)并将“IsPremiumUser”列更新为TRUE。 什么是最好的方法呢?

我看到我可以通过两种方式实现这一目标

  1. 使用加入和更新
  2. 遍历每条记录并进行更新。
  3. 我正在使用SQL Server2008。

    更新:我并不是说使用C#或Java循环记录,而是在SQL本身。我正在寻找减少执行时间的方法,因为有超过200.000条记录。使用update + join

    需要20分钟

    Update2:以下是查询。

    MERGE pref.personpreference AS T
    USING (SELECT PR.PersonID,PR.PersonroleId from personrole PR ) as S
    ON (T.PersonRoleID = S.PersonRoleID)
    WHEN MATCHED THEN 
        UPDATE SET T.SDRPERSONID = S.PersonId;
    
    
    
    UPDATE PP 
    SET PP.SDRPersonID = PR.PersonID
    FROM PREF.PersonPreference PP JOIN PersonRole PR
    ON PP.PersonRoleID = PR.PersonRoleID
    

    注意:合并需要17分钟并更新20分钟才能执行。但我发现修改后的记录数量在这些陈述之间相差1000左右。

2 个答案:

答案 0 :(得分:1)

如果该列位于同一个表中,则使用带有WHERE条件的UPDATE语句,您将在其中定义要更新的行。

UPDATE Customers
SET isPremiumUser = 1 -- true
WHERE some_column operator some_condition 

例如

WHERE friend_members > 10

答案 1 :(得分:0)

始终使用数据库命令而不是循环遍历一堆记录,并在每次符合条件时发出UPDATE语句。它会更快,更快,只有2-3行SQL而不是10-20行java / c#/无论代码。

请查看SQL update query using joins示例。