django query optimization

Jinhyeon Son·2020년 4월 27일
0

개념

목록 보기
13/26

필요성

서버에 접근하기 위해서는 기본적으로 네트워크를 통해야 하므로
필연적으로 오버헤드가 존재한다. 그렇기 때문에 db서버에 대한
접근을 줄이기 위해 쿼리를 최적화하는것은 결과적으로 API 서버의
성능에 영향을 줄 수 있다.

QuerySet Caching

  • 캐싱이 사용되는 경우

    	callable 하지 않은 속성 값
  • 캐싱 되지 않는 경우

    	Foreignkey, OneToOneField, ManyToManyField 등 callable한 속성 객체

select_related

1 to 1 및 1 to m 관계에서 사용할 수 있는 Objects 매니저의 메소드로
인자로 넘겨준 문자열에 해당하는 정방향 관계의 related object를 캐시한다
이 때 Query는 1번 발생한다

syntax

Product.objects.select_related('menu', 'category').all()

# Product 테이블의 모든 레코드를 불러오되 'menu', 'category' FK를 캐시한다

prefetch_related

select_related와 다르게 역참조 관계에서도 사용이 가능한 Objects 매니저의 메소드
현재 테이블과 관계를 갖는 테이블에 각각 Query를 전송하여 파이썬 내부에서 join한다
Product.objects.prefetch_related('#ForeignKey or _set').all()

# Product 테이블의 모든 레코드를 불러오고 문자열에 해당하는 값을 캐시한다

0개의 댓글