我有一个表格,里面有我必须随机化的数据。通过随机化,我的意思是使用来自随机行的数据来更新同一列中的另一行。问题是表本身很大(超过 2 000 000 行)。
我写了一段使用while循环的代码,但速度很慢。
有没有人对实现随机化的更有效方法有任何建议?
最佳答案
为了更新行,更新需要大量的处理时间(CPU + I/O)。
您是否测量过随机化行与执行更新的相对开销?
您需要做的就是选择随机行,这是一种选择随机行样本的有效方法(在本例中为 1% 的行)
SELECT * FROM myTable
WHERE 0.01 >= CAST(CHECKSUM(NEWID(), pkID) & 0x7fffffff AS float) / CAST (0x7fffffff AS int)
其中
pkID
是您的主键列。这篇文章可能很有趣:
关于sql - 有效地随机化(洗牌)Sql Server 表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910573/