私は数千のレコードを持っており、350レコードのバッチでそれらを更新する必要があります。
以下の2つの更新ステートメントに違いがあるかどうか、およびそれらの1つがより高速に動作するかどうか、使用するデータベースリソースが少ないかどうかなどを知りたいです。
UPDATE TOP (350) database1
SET value1 = '', value2 ='', value3 = ''
WHERE value1 = '123'
UPDATE database1
SET value1 = '', value2 ='', value3 = ''
WHERE ID in
(SELECT TOP 350 ID FROM database1
WHERE value1 = '123')
最初のステートメントが速くなります。ただし、上位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 = ''
また、更新時にトランザクションログのサイズを心配する必要はありません数千レコードここではバッチは必要ありません
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