gpt4 book ai didi

sql - 如何使用 SQL Server 批量更新?

转载 作者:行者123 更新时间:2023-12-01 10:44:35 25 4
gpt4 key购买 nike

我有一个包含 1000 万行的表,我需要将它与另一个表连接并更新所有数据。这花费了 1 个多小时,它使我的事务日志增加了 10+ GB。有没有其他方法可以增强这种性能?

我相信每次更新后,都会检查索引和约束并记录所有信息。有没有办法告诉 SQL Server 仅在更新完成后检查约束并最少记录更新操作?

我的查询如下。我修改了一些名称,以便于阅读。

UPDATE o
SET o.Info1 = u.Info1, o.Info2 = u.Info2, o.Info3 = u.Info3
FROM Orders o
INNER JOIN Users u
ON u.ID = o.User_ID

编辑:正如评论中所问,表定义将类似于以下内容(再次简化以创建通用问题)。

表订单
ID int PK
OrderNumber nvarchar(20)
User_ID int FK to table Users
Info1 int FK to table T1
Info2 int FK to table T2
Info2 int FK to table T3

表用户
ID int PK
UserName nvarchar(20)
Info1 int FK to table T1
Info2 int FK to table T2
Info2 int FK to table T3

最佳答案

首先没有BULK UPDATE这样的东西,你可以做的一些事情如下:

  • 如果可能,请在执行此操作之前将数据库置于简单恢复模式。
  • 在执行更新之前删除索引并在更新完成后再次创建它们。
  • 以较小的批次进行更新,例如
    WHILE (1=1)
    BEGIN
    -- update 10,000 rows at a time
    UPDATE TOP (10000) O
    FROM Table O inner join ... bla bla

    IF (@@ROWCOUNT = 0)
    BREAK;
    END

  • 笔记

    如果您使用简单模式选项,请不要忘记在将恢复模式切换回完整模式后进行完整备份。因为在您进行完整备份之前,简单地将其切换回完整恢复模式不会对日志进行分层。

    关于sql - 如何使用 SQL Server 批量更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27933584/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com