[펌글] N+1 조회란 무엇인가?

By | 2월 4, 2009

- 출처 : 자바서비스넷 -
http://www.javaservice.net/~java/bbs/read.cgi?b=qna2&c=r_p&m=resource&n=1122623557&s=t

제목 : Re: N+1조회문제가 뭔가요?
글쓴이: 이희승(anoripi) 2005/07/30 07:38:23 조회수:238 줄수:24
구글에서 N + 1 query issue 로 검색하니 나오네요.
ORM 툴들은 보통 lazy loading 을 합니다.  그런데 lazy loading 이란 건 사용자가 예기치
않게 데이터를 원하게 될 때만 유용합니다.  즉, lazy loading 할 데이터가 사실은 사용자가
의도적으로 한 번에 다 읽고 싶은 데이터였다면?  (i.e. join 을 통한 explicit fetching)
이 때는 lazy loading 의 성능이 훨씬 떨어지게 되는데, 왜냐하면, 오리지널 쿼리 1 개 +
셀렉트된 row 에 대한 각각의 쿼리 N 개 가 발생하기 때문입니다. (부서쿼리가 오리지널
쿼리이고, 부서에 소속한 사원 쿼리를 각 부서에 대해 따로 수행한다고 생각하시면 됩니다.)
이것을 N+1 이슈라고 부릅니다.
만약 Department 라는 빈에 getEmployees() 라는 메소드가 있을 경우, iBatis 의 경우에는
lazy loading 없이 한 번의 쿼리로 데이터를 가져올 수 있는지 잘 모르겠습니다만,
만약 그렇다면 N+1 이슈를 갖고 있는 것이겠지요.  (이부분에 대한 아시는 분의 답변이 필요합니다.)
반대로 Hibernate 와 같은 프레임워크는 iBatis 와는 달리 hbm.xml 파일에 디비 매핑
정보가 상세히 기술되어 있어 좀 더 똑똑하게, 또는 사용자가 원하는 대로 튜닝이
가능하다는 뜻인 듯 합니다.
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments