使用SQL Server 2012,我有一个包含700万行的表。 PK列是GUID(COMB GUID)。我试图测试查询的性能,首先需要更新随机数据采样,我想更改50,000行的列值(而不是PK)。
按NEWID()选择Top 50,000 Order需要太长时间,我认为SQL Server正在扫描整个表。我似乎无法为TABLESAMPLE获取正确的语法,它返回一个空集。
让这个工作的最佳方法是什么?
答案 0 :(得分:2)
并将其视为更新:
;WITH x AS
(
SELECT TOP (50000) col
FROM dbo.table TABLESAMPLE (50000 ROWS)
)
UPDATE x SET col = 'something else';
但有几点注意事项:
ORDER BY NEWID()
更大的性能提升。在1MM行的桌子上,这在我的机器上花了一分多钟。