django에서는 쿼리를 최적화 하기 위한 함수를 제공하고 있다.
일단 쿼리문 최적화를 하기위한 이유는 다음과 같다.
쿼리문을 최적화하기 위한 함수는 select_related와 prefetch_related가 있는데, 2개의 함수 설명은 다음과 같다.
다음은 각 매서드에 대한 사용예시 이다.
# select_related() 예시
from django.db import models
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
...
class Author(models.Model):
name = models.CharField(max_length=100)
...
# Book과 Author의 관계에 대한 JOIN 수행
books = Book.objects.select_related('author').all()
# prefetch_related() 예시
from django.db import models
class Book(models.Model):
authors = models.ManyToManyField(Author)
title = models.CharField(max_length=100)
...
class Author(models.Model):
name = models.CharField(max_length=100)
...
# Author와 Book 객체 모두 미리 캐시하여 필요한 정보를 한 번에 가져옴
books = Book.objects.prefetch_related('authors').all()
위 예시에서 select_related() 메서드는 Book 모델과 Author 모델의 관계 필드인 author에 대한 JOIN을 수행하여 필요한 정보를 한 번에 가져오고, prefetch_related() 메서드는 Book 모델과 Author 모델의 다대다 관계 필드인 authors와 관련된 객체들을 미리 캐시하여 필요한 정보를 한 번에 가져온다. 이러한 방식으로 데이터베이스 쿼리를 최적화하면, 성능 개선을 기대할 수 있다.