DB
DB에 대하여(25)_select_related & prefetch_related (feat. Django)
데이터분석가 이채은
2024. 5. 12. 09:00
문제 상황
prefetch_related 적용
문제 해결 1단계입니다.
게시글을 조회하면서 참조된 댓글까지 한 번에 조회합니다.
# views.py
def index_4(request):
# articles = Article.objects.order_by('-pk')
articles = Article.objects.prefetch_related('comment_set').order_by('-pk')
# articles = Article.objects.prefetch_related(
# Prefetch('comment_set', queryset=Comment.objects.select_related('user'))
# ).order_by('-pk')
"111 queries including 110 similar and 100 duplicated" → "102 queries including 100 similar and 100 duplicates"
select_related & prefetch_related 적용
문제 해결 2단계입니다.
게시글 + 각 게시글의 댓글 목록 + 댓글의 작성자를 한 번에 조회
# views.py
def index_4(request):
# articles = Article.objects.order_by('-pk')
# articles = Article.objects.prefetch_related('comment_set').order_by('-pk')
articles = Article.objects.prefetch_related(
Prefetch('comment_set', queryset=Comment.objects.select_related('user'))
).order_by('-pk')
"102 queries including 100 similar and 100 duplicats" → "2 queries"