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

MySQL 테이블에서 무작위(랜덤) 행 하나를 선택하는 방법

MySQL에서 테이블에 저장된 데이터 중 무작위(random)로 값을 선택하고 싶다면 rand() 함수를 활용하면 됩니다. 이번 글에서는 무작위 값 중 단 하나의 행만 가져오는 방법을 살펴보겠습니다. 하나만 선택하기 때문에 쿼리 마지막에 LIMIT 1을 함께 사용합니다.

기본 문법

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

동작 원리는 간단합니다. order by rand()가 모든 행에 난수를 부여한 뒤 이를 기준으로 정렬하고, limit 1이 정렬된 결과 중 첫 번째 행 한 개만 반환합니다.

예제 테이블 생성하기

먼저 실습용 테이블을 만들어 보겠습니다.

mysql> create table DemoTable735 (Amount int);
Query OK, 0 rows affected (0.57 sec)

데이터 삽입

insert 명령을 사용해 테이블에 몇 개의 레코드를 넣어 줍니다.

mysql> insert into DemoTable735 values(984474734);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable735 values(489393323);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable735 values(23432333);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable735 values(8949933);
Query OK, 1 row affected (0.14 sec)

저장된 데이터 확인

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable735;

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

+-----------+
| Amount    |
+-----------+
| 984474734 |
| 489393323 |
| 23432333  |
| 8949933   |
+-----------+
4 rows in set (0.00 sec)

무작위 행 선택 쿼리 실행

이제 MySQL 테이블에서 무작위로 행 하나를 선택하는 쿼리를 실행해 보겠습니다.

mysql> select *from DemoTable735 order by rand() limit 1;

출력 결과는 다음과 같습니다.

+-----------+
| Amount    |
+-----------+
| 489393323 |
+-----------+
1 row in set (0.00 sec)

이처럼 order by rand() limit 1 구문 하나만으로도 테이블에서 무작위 행을 간단하게 추출할 수 있습니다. 쿼리를 실행할 때마다 매번 다른 행이 반환되는 것을 확인할 수 있습니다.

참고: 대용량 테이블에서의 성능 주의사항

ORDER BY RAND()는 테이블의 모든 행에 대해 난수를 계산한 후 정렬하기 때문에, 데이터 건수가 수백만 건 이상으로 많은 대형 테이블에서는 성능 저하가 발생할 수 있습니다. 이런 경우에는 테이블의 최대/최소 ID 사이에서 무작위 숫자를 뽑은 뒤 해당 ID의 행을 조회하거나, 미리 계산된 인덱스 컬럼을 활용하는 방식이 더 효율적입니다.