회원1 table
id,name
회원2 table
id,name
랜덤매칭로깅 table
회원1(id), 회원2(id), 날짜
테이블이 이렇게 3개 있습니다.
매일 한번씩 회원1 회원2 id값을 중복없이 랜덤 매칭하려합니다.
select a.id, (select id from 회원2 where `회원2(id)` not in(select id from 랜덤매칭로깅 where `회원1` = a.id) order by rand() limit 1) from `회원1` a
이렇게 무식한 쿼리를 던지니까, rows가 적을 땐 별 문제 없으나,
1만건 이상 올라가니 DB가 뻣을려고 하네요.. (쿼리 실행시간이 15분 가량)
인덱스 걸린 상태에서 not in속도가 left조인보다 속도가 나은거 같아서 사용을 했는데
아무리 봐도 이렇게 쿼리를 써야 하는게 맞나 싶네요..
혹시 시원한 쿼리나 방법이 있을까 싶은데.. 조언 부탁드립니다.. ^^;; |