2011-08-01 30 views
1

我有一张200.000+条记录的Customer表,我必须循环查看条件(在特定列上)并将“IsPremiumUser”列更新为TRUE。 什么是最好的方式去呢?需要帮助SQL - 通过2 Lac +记录进行解析

我看,我可以通过两种方式

  1. 使用加入,并通过每个记录更新
  2. 循环和更新它实现这一目标。

我正在使用SQL Server2008。

更新:我不是指使用C#或Java循环记录,而是在SQL本身。我正在寻找减少执行时间的方法,因为有超过200.000条记录。它需要20分钟使用更新+加入

更新2:这里是查询。

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

你能发布这类以20 +分钟运行您的更新语句? 它更新了多少条记录?刚刚发现了什么[2Lakh] [1]是 –

+0

Update2有查询。 – nfa379

回答

0

始终使用数据库命令而不是循环访问一堆记录,并在每次满足条件时发出UPDATE语句。它会更快,更快,只有2-3行SQL而不是10-20行java/c#/ whatever-code。

查看示例SQL update query using joins

+0

感谢cularis.That真的帮助。 – nfa379

+0

我并不是指使用C#或Java循环记录,而是使用SQL本身。我只是在寻找减少执行时间的方法,因为有超过2Lac的记录。这需要20分钟使用更新+加入 – nfa379

+0

好吧,但即使在SQL中循环将花费时间,然后20分钟更新+加入。你是否建立了适当的索引? – Jacob

1

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

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

WHERE friend_members > 10 
+0

谢谢Niktrs ... – nfa379