Jiri Tousek이 말한 것처럼 실행하는 각 쿼리는 이전 쿼리가 반환 한 것을 알아야합니다.
테이블에 이전에 반환 된 행의 ID를 삽입 한 다음 새 결과가 해당 테이블에없는 것을 확인하는 대신 새 무작위 순서를 정의하는 임의의 숫자로 테이블에 열을 추가하기 만하면됩니다. 행 수
이 열을 임의의 숫자로 한 번 채우십시오.
이렇게하면 임의의 행 순서를 기억하고 안정적으로 만들 수 있으므로 쿼리 사이에 기억해야하는 것은 지금까지 요청한 임의 행 수입니다. 그런 다음 이전 쿼리에서 중지 한 곳부터 시작하여 필요한만큼의 행을 가져옵니다.
열을 RandomNumber binary(8)
테이블에 추가하십시오. 다른 크기를 선택할 수 있습니다. 8 바이트이면 충분합니다.
임의의 숫자로 채우십시오. 일단.
UPDATE tablename
SET RandomNumber = CRYPT_GEN_RANDOM(8)
는
RandomNumber
컬럼에 인덱스를 생성합니다. 고유 색인. 반복되는 난수 (20,000 개의 행과 8 개 길이의 난수가있을 법하지 않음)가 나온다면 모든 숫자가 고유 할 때까지 난수를 다시 생성하십시오 (
UPDATE
문을 다시 실행하십시오).
요청 처음 10 임의 행 :
SELECT TOP(10) *
FROM tablename
ORDER BY RandomNumber
당신은/프로세스로 다음 10 개 임의 행이 마지막으로 사용 된 임의의 숫자를 기억하십시오. 이를 수행하는 가장 좋은 방법은이 10 개의 임의의 행을 처리하는 방법에 따라 다릅니다.
DECLARE @VarLastRandomNumber binary(8);
SET @VarLastRandomNumber = ...
-- the random number from the last row returned by the previous query
요청 향후 10 임의 행 :
SELECT TOP(10) *
FROM tablename
WHERE RandomNumber > @VarLastRandomNumber
ORDER BY RandomNumber
프로세스를하고 마지막으로 사용 된 임의의 숫자를 기억한다.
반복. 보너스로 각 반복마다 다른 수의 임의의 행을 요청할 수 있습니다 (매번 10 번 일 필요는 없습니다). 내가 무엇을 할 것이라고
보기 샘플 데이터하시기 바랍니다. – NEER