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

MySQL에서 원하는 개수만큼 랜덤 행을 추출하는 효율적인 방법

MySQL에서 테이블의 데이터를 무작위(랜덤)로 조회하려면 RAND() 함수를 사용하고, 반환받을 레코드 수를 제한하려면 LIMIT 절을 함께 사용하면 됩니다.

이 두 가지를 조합하면 전체 데이터 중에서 원하는 개수만큼의 임의의 행을 손쉽게 추출할 수 있습니다.

1. 샘플 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.54 sec)

2. 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values(100);
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values(300);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable values(600);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable values(700);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values(1000);
Query OK, 1 row affected (0.15 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

출력 결과

+-------+
| Value |
+-------+
| 100 |
| 300 |
| 600 |
| 700 |
| 1000 |
+-------+
5 rows in set (0.00 sec)

4. 랜덤으로 특정 개수의 행 추출하기

아래 쿼리는 ORDER BY RAND()로 모든 행을 무작위로 섞은 뒤, LIMIT를 사용해 그중 4개의 행만 반환합니다.

mysql> select *from DemoTable order by rand() limit 4;

출력 결과

+-------+
| Value |
+-------+
| 1000 |
| 600 |
| 100 |
| 700 |
+-------+
4 rows in set (0.00 sec)

실행할 때마다 결과 순서와 선택되는 행이 달라지는 것을 확인할 수 있습니다.

참고 사항

ORDER BY RAND()는 간편하지만, 내부적으로 모든 행에 난수를 생성한 후 정렬하기 때문에 레코드 수가 매우 많은 대용량 테이블에서는 성능 저하가 발생할 수 있습니다. 이 경우 기본 키 범위에서 난수를 생성해 조인하는 방식 등 대체 기법을 고려하는 것이 좋습니다.