我有一个包含200.000+条记录的Customer表,我必须循环查看条件(在特定列上)并将“IsPremiumUser”列更新为TRUE。 什么是最好的方法呢?
我看到我可以通过两种方式实现这一目标
我正在使用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左右。
答案 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#/无论代码。