mysql 쿼리문 어떤게 효율이 더 좋을까요? IN, JOIN 채택완료
JKWang
3년 전
조회 2,617
회원의 아이디 리스트를 구해서 해당 아이디에 대한 데이터를 가져오는 쿼리인데요
mb_id에는 모두 인덱스가 걸려있습니다.
조건이 되는 회원의 아이디 리스트를 여러곳에서 사용해야 하는 경우입니다.
</p>
<p>select mb_id from member where level > 2 group by mb_id // ['aa','bb',cc','dd'];</p>
<p>
IN절을 이용했을때
</p>
<p>select * from member_request where mb_id in ('aa','bb','cc','dd')</p>
<p>select * from member_answer where mb_id in ('aa','bb','cc','dd')</p>
<p>select * from member_choice where mb_id in ('aa','bb','cc','dd')</p>
<p>
join을 이용했을때
</p>
<p>select * from member_request as a</p>
<p>inner join (</p>
<p> select mb_id from member where level > 2 group by mb_id</p>
<p>) as b</p>
<p>on a.mb_id = b.mb_id</p>
<p> </p>
<p>select * from member_answer as a</p>
<p>inner join (</p>
<p> select mb_id from member where level > 2 group by mb_id</p>
<p>) as b</p>
<p>on a.mb_id = b.mb_id</p>
<p> </p>
<p>select * from member_choice as a</p>
<p>inner join (</p>
<p> select mb_id from member where level > 2 group by mb_id</p>
<p>) as b</p>
<p>on a.mb_id = b.mb_id</p>
<p>
어떤쿼리가 더 효율적일까요??
댓글을 작성하려면 로그인이 필요합니다.
답변 3개
채택된 답변
+20 포인트
답변에 대한 댓글 2개
J
JKWang
3년 전
�
하틴
3년 전
저도 부족한 실력이지만..ㅠㅠ
몇십몇백만건이 아니면 그렇게 체감이 나는 부분은 아니더라구여..
몇십몇백만건 데이터에서 실제로 돌려보는게 어떤게 더 빠른지 알 수 있긴 한데
제 생각에는 테이블을 조회하는 횟수가 많을 수록 부하가 걸린다고 주워들어서 IN이 더 빠르지 않을까요?
몇십몇백만건이 아니면 그렇게 체감이 나는 부분은 아니더라구여..
몇십몇백만건 데이터에서 실제로 돌려보는게 어떤게 더 빠른지 알 수 있긴 한데
제 생각에는 테이블을 조회하는 횟수가 많을 수록 부하가 걸린다고 주워들어서 IN이 더 빠르지 않을까요?
댓글을 작성하려면 로그인이 필요합니다.
3년 전
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
로그인 후 평가할 수 있습니다
답변에 대한 댓글 3개
�
백조사랑
3년 전
inner join 보다는 left outer join 이 낳아 보이네요
�
엑스엠엘
3년 전
member 우선이면 left join
member_* 기준이면 inner join 쓰시면 됩니다.
member_* 기준이면 inner join 쓰시면 됩니다.
J
JKWang
3년 전
질문의 의도는 인덱스를 이용해서 검색할때 join이 나을지 in이 나을지 였습니다.
group by를 쓴건 음..질문에 사용된 예시가 이상했지만ㅎㅎ
여러개의 데이터중에서 group 으로 가져온다는 의미였습니다.
답변 달아주셔서 감사합니다~
group by를 쓴건 음..질문에 사용된 예시가 이상했지만ㅎㅎ
여러개의 데이터중에서 group 으로 가져온다는 의미였습니다.
답변 달아주셔서 감사합니다~
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
데이터가 많을때 더 빠른 쿼리로 사용하고 싶은데 막막합니다ㅎㅎ