Home N+1 문제
Post
Cancel

N+1 문제

N+1 Problem

Car 객체 컬렉션(또는 db rows)가 있다고 가정하자, 각각의 CarWheel 객체를 갖공 있다. 즉, CarWheel 은 1-to-many 관계이다. 이때 모든 자동차들 정보를 쿼리한다고 가정해보자. naive 방법은 아래와 같을 것이다.

1
SELECT * FROM Cars;

그리고 각각의 Car에 대해서 다음의 쿼리를 실행한다.

1
SELECT * FROM Wheel WHERE CardId = ?

여기서 Cars에 대한 쿼리를 한번 실행하고, N개의 추가적인 쿼리를 실행하게 된다. 즉 N+1번의 쿼리를 실행하게 된다.

대안으로, 다음과 같이 쿼리를 실행할 수 있다.

1
SELECT * FROM Wheel

이는 db로의 round-trip의 수를 2회로 줄일 수 있게 된다. 대부분의 ORM tool들은 N+1 select를 방지하기 위한 몇가지 방법을 제공하고 있다.

참고

stackoverflow

This post is licensed under CC BY 4.0 by the author.

JoinColumn vs MappedBy (ORM을 사용할때 주의할점)

Hashing

Comments powered by Disqus.

Trending Tags