MySQL에서 RAND() 함수를 ORDER BY 절과 함께 사용하면 결과 집합에 포함된 행이나 값들의 순서를 무작위로 섞을 수 있습니다. 쿼리가 실행될 때마다 각 행에 새로운 난수가 부여되어 정렬되기 때문에, 실행할 때마다 다른 순서의 결과를 얻게 됩니다.
예시 테이블
다음과 같은 레코드를 가진 'Employee' 테이블이 있다고 가정해 보겠습니다.
mysql> Select * from employee; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 1 | Gaurav | 50000 | | 2 | Rahul | 20000 | | 3 | Advik | 25000 | | 4 | Aarav | 65000 | | 5 | Ram | 20000 | | 6 | Mohan | 30000 | | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+--------+--------+ 8 rows in set (0.00 sec)
ORDER BY RAND() 사용하기
아래 쿼리는 ORDER BY RAND()를 사용하여 결과 집합의 행 순서를 무작위로 섞는 예시입니다.
mysql> Select * from Employee ORDER BY RAND(); +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 4 | Aarav | 65000 | | 1 | Gaurav | 50000 | | 3 | Advik | 25000 | | 7 | Aryan | NULL | | 6 | Mohan | 30000 | | 8 | Vinay | NULL | | 5 | Ram | 20000 | | 2 | Rahul | 20000 | +----+--------+--------+ 8 rows in set (0.00 sec)
위 출력 결과에서 볼 수 있듯이, 원래 테이블의 ID 순서와 달리 행들이 무작위 순서로 반환되었습니다. 동일한 쿼리를 다시 실행하면 매번 다른 순서의 결과를 확인할 수 있습니다.
성능 관련 주의사항
ORDER BY RAND()는 테이블의 모든 행에 대해 난수를 생성한 후 이를 정렬하는 방식으로 동작합니다. 따라서 레코드 수가 많은 대용량 테이블에서는 성능 저하가 발생할 수 있습니다. 소규모 데이터셋에서는 유용하지만, 대용량 테이블에서 무작위 샘플을 추출해야 한다면 임의의 ID 범위를 조회하거나 별도의 샘플링 기법을 사용하는 것이 좋습니다.