Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 결과 집합의 행 또는 값을 무작위로 섞는 방법

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 범위를 조회하거나 별도의 샘플링 기법을 사용하는 것이 좋습니다.