SQL UPDATE TOP () 或 UPDATE 与 SELECT TOP
Posted
技术标签:
【中文标题】SQL UPDATE TOP () 或 UPDATE 与 SELECT TOP【英文标题】:SQL UPDATE TOP () or UPDATE with SELECT TOP 【发布时间】:2017-02-01 10:43:05 【问题描述】:我有几千条记录,我需要分批更新它们,每批 350 条记录。
我想知道以下两个更新语句是否有任何区别,如果其中一个会更快,使用更少的数据库资源等。
声明 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')
【问题讨论】:
第二个语句比较慢,我最近测试了这个:-) 是的,前 150 条记录是随机选择的。两个查询中更新的记录可能不同 几千条记录?真的需要分批做吗? 【参考方案1】:第一个语句会更快。但是前 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 = ''
此外,您在更新数千条记录时不必担心事务日志的大小这里不需要批处理
【讨论】:
【参考方案2】:从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
【讨论】:
以上是关于SQL UPDATE TOP () 或 UPDATE 与 SELECT TOP的主要内容,如果未能解决你的问题,请参考以下文章