[RoadMap] N + 1 problem
Info Notice:
안녕하세요. HwanSeok입니다.
본 포스팅은 backend의 기초 개념을 다지는 포스팅입니다.
N+1 문제
이 문제는 쿼리 1번으로 N개의 row를 가져왔는데, 다시 관련된 컬럼을 얻기 위해서 N번 쿼리를 추가적으로 수행하는 문제를 말합니다. DB 쿼리 수행 비용이 크기 때문에 서비스 응답시간을 크게 느리게 만들 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
# 1번의 쿼리로 N개의 데이터를 조회
books = query(
select *
from books
)
# N번의 쿼리로 각각의 관련 컬럼을 다시 조회
for book in book:
book['author'] = query(
select name
from author
where id = books.author_id
)
위와 같은 문제는 join을 사용하면 한 번의 쿼리로 진행할 수 있습니다.
1
2
3
4
book = query(
select b.*, a.author_name as author_name
from books b LEFT JOIN authors a ON b.author_id = a.id
)
또는 WHERE IN 쿼리를 통해 해결할 수 있습니다.
1
2
select * from books;
select * from authors where id in (1,2,3, ...);
Reference
- https://www.infoq.com/articles/N-Plus-1/
Success Notice:
수고하셨습니다.
Leave a comment