본문 바로가기

코딩, 엑셀

mysql 에서 랜덤 추출하기


테이블 A에 담긴 데이터 건수가 어마어마하게 많다고 가정한다. 이 테이블로 부터 랜덤으로 N개의 데이터를 가져오려고 할 때 아래와 같은 쿼리로 수행이 가능한다 

 

select a.key1, a.key2, a.something
from table1 a join (
   select key1, key2
   from table1
   order by rand()
   limit 100
) b on a.key1 = b.key1 and a.key2 = b.key2
where a.something like '%matchingword%'

table1에서 먼저 primary key 필드를 랜덤으로 100개를 가져온후 이 결과와 table1을 조인해서 나머지 정보를 가져오는 방식이다. "order by rand()" 구문을 활용할 때 select할 컬럼을 반드시 primary key 컬럼으로 해야 한다는 것이 키 포인트이다. 다른 컬럼을 명시하면 수행속도가 현저하게 느려진다. (왜 primary key 컬럼을 조회할때 속도가 빨라지는 지는 모르겠다)

 

어쨌거나 이렇게 접근을 하면 아무런 무리없이 대용량 테이블에서 랜덤으로 빠르게 데이터를 조회할 수 있다. 경향 분석을 할때는 엄청 도움이 된다. 


Only I can change me life, no one can do it for me. – Carol Burnett