SQL UPDATE TOP () 或使用 SELECT TOP 进行更新

标签 sql sql-server sql-update

我有几千条记录,我需要分批更新它们,每批更新 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 条记录是随机选择的。两个查询中更新的记录可能不相同。由于您将更新分成批处理,因此您的方法可能不会更新所有记录。

我将使用以下与您的方法一致的方法来完成此操作。

;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 = '' 

此外,在更新数千条记录时,您不必担心事务日志大小,这里不需要批处理

关于SQL UPDATE TOP () 或使用 SELECT TOP 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41977698/

相关文章:

mysql - 如何在mysql中按小时汇总

mysql - 如何更新每天具有最大值的行?

mysql - 使用更新增加列或创建更新触发器 - mysql

sql - T-SQL聚合函数逻辑错误

mysql - 查找表中出现频率最高的项目

sql - 在 MySQL 中需要某种 "conditional grouping"

sql-server - 选择日期字段为一年的记录

php - 即使尽可能设置 UTF-8,也无法显示德语变音符号

sql - 更新+使用(行锁)+ CTE

MySQL更新查询最近1年的平均值