서버에 접근하기 위해서는 기본적으로 네트워크를 통해야 하므로
필연적으로 오버헤드가 존재한다. 그렇기 때문에 db서버에 대한
접근을 줄이기 위해 쿼리를 최적화하는것은 결과적으로 API 서버의
성능에 영향을 줄 수 있다.
캐싱이 사용되는 경우
callable 하지 않은 속성 값
캐싱 되지 않는 경우
Foreignkey, OneToOneField, ManyToManyField 등 callable한 속성 객체
1 to 1 및 1 to m 관계에서 사용할 수 있는 Objects 매니저의 메소드로
인자로 넘겨준 문자열에 해당하는 정방향 관계의 related object를 캐시한다
이 때 Query는 1번 발생한다
Product.objects.select_related('menu', 'category').all()
# Product 테이블의 모든 레코드를 불러오되 'menu', 'category' FK를 캐시한다
select_related와 다르게 역참조 관계에서도 사용이 가능한 Objects 매니저의 메소드
현재 테이블과 관계를 갖는 테이블에 각각 Query를 전송하여 파이썬 내부에서 join한다
Product.objects.prefetch_related('#ForeignKey or _set').all()
# Product 테이블의 모든 레코드를 불러오고 문자열에 해당하는 값을 캐시한다