본문 바로가기

개발이야기

JoinColumn에 index를 걸어야 할까?

반응형

company 와 Branch 일:다 관계

 

컴퍼니와 브랜치 .. 전형적인 일대다 관계다. 

Branch.companyId 가 FK로 사용되고 있지만 ... 성능이나 혹은 다른 이유로 FK 제약을 생략한다면 FK 대신 index를 걸어 줘야 할까?

물론 company.getBranches()와 같이 OneToMany relationship을 가진다면 당연히 index를 걸어줘야 한다. 

그런데 만약 Branch.getCompany()와 같이 ManyToOne 단방향 관계만 가진다면 .. index가 필요할까? 

 

조인 쿼리 없이 Lazy petch만 사용한다면 branch가 이미 companyId를 알고 있고

company 테이블에서 PK로 조회 하기 때문에 굳이 index 가 없어도 된다. 

 

그런데 조인 쿼리를 사용하는 경우엔 상황에 따라서 풀스캔 타는 경우가 있어서 index를 추가해줘야 한다. 

ex)    
select * from company a inner join Branch b 
on a.id = b.companyId 
where a.companyName = ? 

Company 테이블에서 먼저 조건을 찾고 해당 id로  Branch.companyId와 비교 하는 경우 인덱스가 없으면 풀스캔을 태운다. 

반응형