[JPA, QueryDsl] inner join ? left join ?

2023. 6. 6. 16:03JPA

querydsl 을 사용한 예시를 보면 대부분 left join을 사용하는 것을 볼 수 있었다.

이번 팀 프로젝트를 진행하며 내게 querydsl을 알려주시던 분은 항상 left join을 사용했다.

 

그런데 어떤 이유로 left join을 사용하는 것인지, 모든 경우에 left join을 사용해야 하는지가 궁금해졌다.

 

그래서 찾아본 결과로 대부분의 상황은 left join으로 해결이 되긴 했다.

 

왜냐하면 left join 으로 필요한 entity의 결과를 모두 조회한 후, 조인조건에 맞게 조인테이블을 합친 후 where절로 다시 한 번 조건을 걸어주는게 일반적이기 때문이다.

 

이걸 inner join으로 사용한다면 on에서 where의 역할을 수행한다고 볼 수 있다.

 

하지만 성능면에서 보면 left join 같은 경우에는 필요한 데이터만 가져오는 것이 아니라 모든 데이터를 가져오기 때문에 성능에서 좋지 않을 것이라는 생각이 들었다.

 

예시로 Member 테이블과 연관관계가 맺어져 있는 Order 테이블을 대상으로 <나의 주문내역>을 조회하는 상황에서

left join을 사용하면 모든 Order 데이터를 다 가져온 후에 where로 다시 memberId에 대한 조건을 걸어주고 그에 맞는 결과를 가져오게 된다.

 

하지만 Inner join에 on절로 주어진 memberId와 비교하여 Order 데이터를 조회한다면 성능면에서 조금이나마 더 좋을 수 있을 것이라는 생각이 든다.