我需要通过存储过程执行以下更新查询:
UPDATE table1
SET name = @name (this is the stored procedure inputparameter)
WHERE name IS NULL
Table1 没有索引或键,5 列,其中 4 个整数和 1 个 varchar(可更新列“name”是 varchar 列)
NULL 记录大约有 15.000.000 行需要更新。这大约需要 50 分钟,我认为这太长了。
我正在运行 Azure SQL DB 标准 S6(400DTU)。
有人可以给我提高性能的建议吗?
最佳答案
由于您没有任何键或索引,我可以建议采用以下方法。
1- 使用 INTO
创建一个新表(这将复制数据),如以下查询。
SELECT
CASE
WHEN NAME IS NULL THEN @name
ELSE NAME
END AS NAME,
<other columns >
INTO dbo.newtable
FROM table1
2-删除旧表
drop table table1
3-将新表重命名为table1
exec sp_rename 'dbo.newtable', 'table1'
另一种方法可以使用批量更新,有时与批量更新相比,您可以获得更好的性能(您需要通过调整批量大小进行测试)。
WHILE EXISTS (SELECT 1 FROM table1 WHERE name is null)
BEGIN
UPDATE TOP (10000) table1
SET name = @name
WHERE n ame is null
END
关于sql - 大表上的简单 UPDATE 查询性能较差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54900128/