有时表中的行数超过 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/