[종결] n+1이슈를 해결해라

정은경·2021년 2월 8일
0
  • queryset은 lazy하다! 바로 execute하지 않는다
  • foreign key로 바라보는 데이터는 또다시 query를 수행해야 가져올 수 있다

N+1 Query 문제

1) N+1 Query

하나의 쿼리에서 생겨난 결과 리스트에 루프를 돌고, 결과 리스트의 각 결과별로 또다른 쿼리는 수행하는 것

result_list = query_result
for r in result_list:
	# query 수행

2) 2N+1 Query

3) NM+N+1 Query

N+1 Query '해결'을 위한 도구들

select_related는 같은 쿼리에서 fetch
prefetch_related는 second query를 사용

1:1 또는 1:M 관계에서만 효과가 있음 (M:M 관계에서는 prefetch_related를 사용)
중복 발생 가능

중복 발생 없음

3) django-auto-prefetch

N+1 Query '예측'을 위한 도구들

1) Django-debug-toolbar

2) nplusone

3) Scout APM

궁금쓰

django chained relation

장고 쿼리 확인하기

Reference

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글