JoJ*_*oJo 3 sql sql-server sqlperformance sql-update
我有一个包含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
Run Code Online (Sandbox Code Playgroud)
编辑:如评论中所述,表定义类似于以下内容(再次简化以创建一般问题).
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
Run Code Online (Sandbox Code Playgroud)
ID int PK
UserName nvarchar(20)
Info1 int FK to table T1
Info2 int FK to table T2
Info2 int FK to table T3
Run Code Online (Sandbox Code Playgroud)
首先,没有这样的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
Run Code Online (Sandbox Code Playgroud)注意
如果您使用简单模式选项,请不要忘记在将恢复模式切换回完全后进行完全备份.由于只需将其切换回完全恢复模式,因此在进行完全备份之前不会进行策略记录.
| 归档时间: |
|
| 查看次数: |
17261 次 |
| 最近记录: |