2014-03-13 2 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

하는 당신은 임의의 배치 문자열을 구축하는 랜드()를 사용할 수, 통계적으로, 각 배치해야, 배치 당 정확히 100000 기록을 할 필요가없는 경우 :

나는 다음을 수행 ~ 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 바이올린 : 당신이 달성하려고하는 무엇 http://sqlfiddle.com/#!9/eb161/1

관련 문제