2011-08-01 9 views
1

私はループして条件を(特定の列で)チェックし、 "IsPremiumUser"列をTRUEに更新する200.000+レコードのCustomerテーブルを持っています。 これを実行する最善の方法は何ですか?必要なヘルプ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 

注:Mergeは実行に17分かかり、20分更新します。しかし、私は、これらのステートメントの間で、変更されたレコードの数が約1000だけ異なることが分かります。

+0

あなたが実行するために20 +分を取って、あなたの更新ステートメントを投稿することができますか? 更新中のレコードはいくつですか?ちょうど[2Lakh] [1]が –

+0

であることが判明しました。 – nfa379

答えて

0

一連のレコードをループしたり、行が条件を満たすたびにUPDATEステートメントを発行するのではなく、常にデータベースコマンドを使用してください。これは、java/c#/ what-c​​odeの10〜20行の代わりに、はるかに速く、わずか2〜3行のSQLだけになります。

たとえば、SQL update query using joinsをご覧ください。

+0

cularisさん、ありがとう。本当に助かりました。 – nfa379

+0

私はC#またはJavaを使用してレコードをループするのではなく、SQL自体をループすることを意味しました。私は2Lac以上のレコードがあるので、実行時間を短縮する方法を探していました。 update + joinを使用して20分かかります。 – nfa379

+0

Okですが、SQLでもループしていても、update + joinの場合は20分かかります。適切なインデックスを設定していますか? – Jacob

1

カラムが同じテーブルにある場合は、更新するローを定義するWHERE条件付きのUPDATE文を使用します。

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

例えば

WHERE friend_members > 10 
+0

ありがとうNiktrs ... – nfa379

関連する問題