N+1 Selects 문제


N+1 문제란 ?

조회를 위해 select 쿼리(1번)를 날렸다가 관련 컬럼을 얻기 위해 N번의 셀렉트(N번)를 하게 되는 상황.


같은 결과를 낼지라도, 그 쿼리를 수행하는데에 있어 몇 번의 쿼리를 해야하는지에 따라 성능이 달라진다.


마이바티스의 association에서 Nested Select, Nested Results를 예로 들 수 있다.


Nested Select 는 결과에서 다시 한번 참조를 하기 위해 다음 Select구문을 실행하는 것을 말하고, Nested Results는 조인된 결과물에 대해 반복적으로 사용하여 결과를 맵핑하는 방법을 말한다. 


예시를 보도록 하겠다. (참고 : http://www.mybatis.org/mybatis-3/ko/sqlmap-xml.html#insert_update_and_delete)



위에서 만약 블로그와 저자와의 관계가 (1:N) 상황이라면 N+1의 셀렉트가 발생하게 된다. 각각의 author_id를 위해 셀렉트를 실행한다



하지만 위와 같이 조인된 결과에 대하여 맵핑을 하게 되면 위와 같이 N+1번의 호출이 일어나지 않게 된다.



+ Recent posts