데이터 분석 기술 블로그

DB에 대하여(25)_select_related & prefetch_related (feat. Django) 본문

DB

DB에 대하여(25)_select_related & prefetch_related (feat. Django)

데이터분석가 이채은 2024. 5. 12. 09:00

문제 상황

문제 상황 (1)
문제 상황 (2)


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"