【问题标题】:SQL UPDATE TOP () or UPDATE with SELECT TOPSQL UPDATE TOP () 或 UPDATE 与 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 条记录是随机选择的。两个查询中更新的记录可能不同
  • 几千条记录?真的需要分批做吗?

标签: sql sql-server sql-update


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      相关资源
      最近更新 更多