mysql - 随机行更新

标签 mysql

有时表中的行数超过 100 万行。

每个批处理将有 100,000 个随机行。

随机化行的最佳方法是什么?

我执行以下操作:

UPDATE  temp1 SET  `batch` =  '';
UPDATE  temp1 SET  `batch` =  'B1' WHERE batch = '' order by rand(number) limit 100000;
UPDATE  temp1 SET  `batch` =  'B2' WHERE batch = '' order by rand(number) limit 100000;
UPDATE  temp1 SET  `batch` =  'B3' WHERE batch = '' order by rand(number) limit 100000;
UPDATE  temp1 SET  `batch` =  'B4' WHERE batch = '' order by rand(number) limit 100000;
UPDATE  temp1 SET  `batch` =  'B5' WHERE batch = '' order by rand(number) limit 100000;

最佳答案

如果您不需要每批正好有 100000 条记录,您可以使用 rand() 构建随机批处理字符串,从统计上看,每批应该有大约 100000 条记录

UPDATE temp1
JOIN   (
    SELECT number, CONCAT('B',CONVERT( FLOOR( RAND() * (nrows/10) ) + 1, CHAR(19) )) AS randBatch
    FROM   temp1
    CROSS JOIN ( SELECT COUNT(*) AS nrows FROM temp1 ) as x
   ) AS y
ON     y.number = temp1.number
SET    batch = randBatch

SQL fiddle :http://sqlfiddle.com/#!9/eb161/1

关于mysql - 随机行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378757/

相关文章:

mysql - yii 给常规查询带来麻烦

java - Flyway 经常挂起(MariaDB 连接器、RDS)

python - MySQL-Python 代码无法正常工作,每次我尝试修复时都会生成各种错误

MySQL-错误 : #1064

mysql - 为计数和行重用 mysql 查询的主体

php - 在 php 中的同一网页上检索所选下拉项的值,并将其他数据发布到其他表单

javascript - Sequelize .set 错误,.set 不是函数

SQL 选择查询合并行

php - 构建具有 100 多个输入的 10 页 php 表单的最有效方法是什么?

mysql - 不同年份有两个月的 where 子句