채택완료
mysql 쿼리문 어떤게 효율이 더 좋을까요? IN, JOIN
회원의 아이디 리스트를 구해서 해당 아이디에 대한 데이터를 가져오는 쿼리인데요
mb_id에는 모두 인덱스가 걸려있습니다.
조건이 되는 회원의 아이디 리스트를 여러곳에서 사용해야 하는 경우입니다.
Copy
select mb_id from member where level > 2 group by mb_id // ['aa','bb',cc','dd'];
IN절을 이용했을때
Copy
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을 이용했을때
Copy
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개 / 댓글 5개
채택된 답변
+20 포인트
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개
답변을 작성하려면 로그인이 필요합니다.
데이터가 많을때 더 빠른 쿼리로 사용하고 싶은데 막막합니다ㅎㅎ