•
잘못된 쿼리, OneToMany, ManyToOne, bulk insert/delete 등의 상황에서 발생한다.
Bulk delete
•
JPQL 또는 배치 옵션으로 처리 가능
ManyToOne
•
fetch join
OneToMany
•
fetch join 을 걸면 처리 가능하지만 불필요한 중복 데이터 조회, inner 조인
•
JPQL join 쓰면 불필요한 데이터 조회
•
batch fetch size 옵션 or JPQL in 절 활용
반정규화
•
동시성 문제 발생할 가능성
fetch type EAGER
•
JPQL(repository 의 쿼리 메서드(findAll, findByName), @Query) 을 이용하면 N+1 발생!
•
findById 는 left outer join 으로 가져옴!