WEB/Django prac

[Django prac][Improve query] 3. 최적화 이론 설명

bay07 2024. 4. 12. 23:52

오늘 최적화의 핵심

=> 한번에 잘 가져오자 ! 


(문제의 원인)

각 게시글마다 댓글의 개수를 반복해서 가져오게 되는 것 

 

# index_1.html

<p> 댓글개수 : {{ article.comment_set.count }} </p>

(해결방법)

annotate 사용하기 

게시글을 조회하면서 댓글의 개수까지 한번에 조회해서 가져오기

 

# articles > views.py 

def index_1(request):
    # articles = Article.objects.order_by('-pk')
    articles = Article.objects.annotate(Count('comment')).order_by('-pk')
    context = {
        'articles': articles,
    }
    return render(request, 'articles/index_1.html', context)

 

* annotate

SQL의 GROUP BY를 사용한다 

아예 게시글을 가져오면서, 각각의 게시글에 작성된 댓글의 count 컬럼을 한번에 가져온다 

그룹을 지어서