mysql 쿼리문 어떤게 효율이 더 좋을까요? IN, JOIN

mysql 쿼리문 어떤게 효율이 더 좋을까요? IN, JOIN

QA

mysql 쿼리문 어떤게 효율이 더 좋을까요? IN, JOIN

본문

회원의 아이디 리스트를 구해서 해당 아이디에 대한 데이터를 가져오는 쿼리인데요

mb_id에는 모두 인덱스가 걸려있습니다.

 

조건이 되는 회원의 아이디 리스트를 여러곳에서 사용해야 하는 경우입니다.

 


select mb_id from member where level > 2 group by mb_id // ['aa','bb',cc','dd'];

 

IN절을 이용했을때


select * from member_request where mb_id in ('aa','bb','cc','dd')
select * from member_answer where mb_id in ('aa','bb','cc','dd')
select * from member_choice where mb_id in ('aa','bb','cc','dd')

 

join을 이용했을때


select * from member_request as a
inner join (
    select mb_id from member where level > 2 group by mb_id
) as b
on a.mb_id = b.mb_id
 
select * from member_answer as a
inner join (
    select mb_id from member where level > 2 group by mb_id
) as b
on a.mb_id = b.mb_id
 
select * from member_choice as a
inner join (
    select mb_id from member where level > 2 group by mb_id
) as b
on a.mb_id = b.mb_id

 

어떤쿼리가 더 효율적일까요??

이 질문에 댓글 쓰기 :

답변 3

select 를 한번더 하는것보다 IN을 쓰는게 좋지않을까요?

저도 부족한 실력이지만..ㅠㅠ
몇십몇백만건이 아니면 그렇게 체감이 나는 부분은 아니더라구여..

몇십몇백만건 데이터에서 실제로 돌려보는게 어떤게 더 빠른지 알 수 있긴 한데
제 생각에는 테이블을 조회하는 횟수가 많을 수록 부하가 걸린다고 주워들어서 IN이 더 빠르지 않을까요?

member 에서 select 하는데 굳이 group by mb_id가 있는 이유를 모르겠네요.

 

select m.mb_id, a.*, b.*, c.* from member m
inner join member_request a on using(mb_id)
inner join member_answer b on using(mb_id)
inner join member_choice c on using(mb_id)
 where level > 2

질문의 의도는 인덱스를 이용해서 검색할때 join이 나을지 in이 나을지 였습니다.

group by를 쓴건 음..질문에 사용된 예시가 이상했지만ㅎㅎ

여러개의 데이터중에서 group 으로 가져온다는 의미였습니다.

답변 달아주셔서 감사합니다~

답변을 작성하시기 전에 로그인 해주세요.
전체 1,543
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT