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