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

MySQL 테이블에서 원하는 개수만큼 랜덤 레코드 선택하기

MySQL에서 테이블의 데이터를 무작위(랜덤)로 조회하고 싶다면 rand() 함수를 사용하면 됩니다. 여기에 LIMIT 절을 함께 사용하면 반환되는 레코드 수를 원하는 개수로 제한할 수 있습니다.

select * from yourTableName order by rand() limit numberOfRecords;

실제 동작 과정을 예제를 통해 살펴보겠습니다.

1. 테이블 생성

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

mysql> create table DemoTable
    -> (
    -> LastName varchar(100)
    -> );
Query OK, 0 rows affected (0.51 sec)

2. 데이터 삽입

insert

mysql> insert into DemoTable values('Brown');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DemoTable values('Smith');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable values('Taylor');
Query OK, 1 row affected (0.10 sec)

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

mysql> insert into DemoTable values('Johnson');
Query OK, 1 row affected (0.20 sec)

3. 전체 레코드 확인

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+----------+
| LastName |
+----------+
| Brown    |
| Smith    |
| Taylor   |
| Miller   |
| Johnson  |
+----------+
5 rows in set (0.00 sec)

4. 랜덤 레코드 N개 선택

이제 order by rand()limit을 조합하여 고정된 개수의 레코드를 무작위로 선택합니다. 아래 쿼리는 5개의 레코드 중 4개를 랜덤하게 가져옵니다.

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

실행 결과는 다음과 같습니다. 실행할 때마다 선택되는 레코드와 순서가 달라지는 것을 확인할 수 있습니다.

+----------+
| LastName |
+----------+
| Brown    |
| Miller   |
| Johnson  |
| Taylor   |
+----------+
4 rows in set (0.03 sec)

참고 사항

order by rand()는 모든 행에 대해 난수를 생성한 후 정렬하기 때문에, 레코드 수가 매우 많은 대용량 테이블에서는 성능이 저하될 수 있습니다. 소규모 테이블에는 간편하고 유용하지만, 대용량 데이터에서는 서브쿼리나 인덱스 기반의 다른 방식을 고려하는 것이 좋습니다.