2011-08-01 31 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