2014-03-13 48 views
0

有时我在表中有超过1百万行。随机化行更新

每批将有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; 
+1

你到底想达到什么目的?为什么要随机更新? (因为最后,所有匹配的行都会被更新) –

+0

我随机化'numbers'字段,因为当前的数字按顺序排序。一旦它被随机化,我将每个批次导出为CSV。 – user1246800

回答

1

如果您不需要有每批次正好10万的记录,你可以使用兰特()来建立一个随机字符串批,并进行统计,每批应该有〜10万点的记录

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小提琴:http://sqlfiddle.com/#!9/eb161/1