我有几千条记录,我需要分批更新350条记录。
我想知道以下两个更新语句是否有任何区别,如果其中一个更快,则使用更少的数据库资源等。
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')
答案 0 :(得分:3)
第一个陈述会更快。但是前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 = ''
在更新几千条记录时,您不必担心事务日志大小此处不需要批处理
答案 1 :(得分:0)
从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