2017-06-15 5 views
1

SQLに新しい経験がある方は、SQLテーブルの多くのカラムをより高速に更新する方法をお探しの場合

多分配列または各要素を使用します。

update ItemDynamic 
set price = SnapShotPrice 
where SnapShotPrice <> Price 

update ItemDynamic 
Set PriceLevelA = SnapShotPriceA 
where snapshotpriceA <> PricelevelA 

update ItemDynamic 
Set PriceLevelB = SnapshotpriceB 
where snapshotpriceB <> PricelevelB 

update ItemDynamic 
Set PriceLevelC = SnapshotpriceC 
where snapshotpriceC <> PricelevelC 
+0

インデックスと呼ばれます。 SSMSには、追加するインデックスを提案できるクエリアナライザが付属しています。あなたはそれを使うべきです。 – Will

+1

更新ステートメント3と4は同じように見えます。これは正しいです? –

答えて

4

これは単一の更新ステートメントで実行できます。このようなもの。

第4の更新ステートメントのポイントは、第3のステートメントと同じであるため、実際のところはわかりません。

+0

関連する列のどれもがNULLに対応していない場合は、これをさらに簡略化して 'SET Price = SnapshotPrice'などにすることができます。この形式では、文は無条件に(すべての行を無条件に)更新します。ステートメントはしません。これは、索引やデータの配布によりますが、高速かもしれません。 –

+0

私は、更新される行を制限する述語を追加することを検討しましたが、複数の等しくない述語が存在するため、非常に遅い可能性があります。信じられないほど曖昧な疑問を抱えて、私はそれが3(または4)ではなく1つのステートメントで実行できることを指摘しようとしていました。 –

+0

わかりましたが、原稿が "高速"(私たちが知っているだけでは "コードが少ない"かもしれません)と具体的に求められていたので、この解決策の走行距離は変わる可能性があると指摘しました。特に、 'SET Column = Column'という形式の更新は、データを書き込まないノーオペレーションではないことに驚くことがよくあります。 –

関連する問題