sql - 有效地随机化(洗牌)Sql Server 表中的数据

标签 sql sql-server random

我有一个表格,里面有我必须随机化的数据。通过随机化,我的意思是使用来自随机行的数据来更新同一列中的另一行。问题是表本身很大(超过 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 是您的主键列。

这篇文章可能很有趣:
  • Randomising data
  • 关于sql - 有效地随机化(洗牌)Sql Server 表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910573/

    相关文章:

    mysql - 无法从 MySQL 导入表

    mysql - WordPress MySQL : add new term relationships if term_taxonomy_id == 4

    python - 如何使用Pycharm在SQL Server中运行SQL?

    java - 使 Math.Random 循环,直到达到特定数字

    mysql - 如何获取具有连接的查询的计数

    sql - 如何从 MySQL 中为每 n 条记录求和

    mysql - 简单的 SQL 连接理解?

    sql-server - 使用单个事务范围时获取 TransactionInDoubtException

    javascript - 我需要在 Meteor 中生成一个随机数

    algorithm - 理解令人困惑的算法符号