web-dev-qa-db-ja.com

SQL UPDATE TOP()またはSELECTTOPを使用したUPDATE

私は数千のレコードを持っており、350レコードのバッチでそれらを更新する必要があります。

以下の2つの更新ステートメントに違いがあるかどうか、およびそれらの1つがより高速に動作するかどうか、使用するデータベースリソースが少ないかどうかなどを知りたいです。

ステートメント1:

UPDATE TOP (350) database1
SET value1 = '', value2 ='', value3 = ''
WHERE value1 = '123'

ステートメント2:

    UPDATE database1
    SET value1 = '', value2 ='', value3 = ''
    WHERE ID in 
       (SELECT TOP 350 ID FROM database1
       WHERE value1 = '123')
4
Rudixx

最初のステートメントが速くなります。ただし、上位150レコードはランダムに選択されます。両方のクエリで更新されたレコードは同じではない可能性があります。更新をバッチに分割しているため、アプローチによってすべてのレコードが更新されない場合があります。

私はあなたのアプローチよりも一貫したアプローチに従ってこれを行います。

;WITH cte
     AS (SELECT TOP (350) value1,
                          value2,
                          value3
         FROM   database1
         WHERE  value1 = '123'
         ORDER  BY ID -- or any other column to order the result 
        )
UPDATE cte
SET    value1 = '',
       value2 = '',
       value3 = '' 

また、更新時にトランザクションログのサイズを心配する必要はありません数千レコードここではバッチは必要ありません

3

Database1からデータをフィルタリングしてから、IDで結合します。以下の方法は、データを選択および更新するためのより現実的です。

UPDATE database1 
    SET value1 = '', value2 ='', value3 = ''
    FROM (
        SELECT top 350 ID
        FROM database1
        WHERE value1 = '123'
        ) as db1
    WHERE db1.ID = database1.ID
0
jainvikram444