我有一个只有500行的表S
,以及有01200行的表F
。两者都使用GUID主键,表F
持有表S
的外键。表F
包含varbinary(max)
列F.Data
,每行约100 KB(总数据库大小约为10 GB)。文件流已打开。我正在使用SQL Server 2014 Express。为什么SQL Server上varbinary(max)的UPDATE语句如此之慢?
当我提出以下UPDATE语句(在SQL Server Management Studio中),这将影响大约10万行
UPDATE F
SET F.Data = 0
FROM F
INNER JOIN S
ON S.SID = F.SID
WHERE S.BITFIELD = 1 AND S.Date < DATEADD(DAY,-90,GETDATE())
查询大约需要30分钟。这是相当不可接受的,但我对SQL知之甚少,不知道为什么或如何使这个查询更有效率。任何可以帮助的大师?
仅供参考,等价的SELECT语句只需要几秒钟。我搜索了Stackoverflow和其他地方,并没有发现任何特别有用的东西(鉴于我对SQL的了解有限)。
100,000个5M字节/行变成500G字节的更新信息。这是一个日志。所有这些都需要记录。 –
我认为你已经回答了你自己的问题,你有一张大桌子,你正在更新很多...... – Matt
它被记录下来,它也必须在表格中结束。建议将更新分解为更小的块。最终,你只是在移动这么多的数据,以至于它会变得很慢。 – Donnie