Django ORM (QuerySet)구조와 원리 그리고 최적화전략 - 김성렬 - PyCon Korea 2020

Django ORM의 특징

Lazy Loading 지연 로딩 : 정말 필요해야만 SQL호출한다.

전체 쿼리셋을 불러오고 그 중 하나의 값만 불러오게 코드를 작성하면 하나의 값만 쿼리셋은 결국 불러오게 만듭니다. 그러나 이런 방법이 오히려 독이 될 수 있기도 한데,

똑같은 코드를 모든거로 다시 불러오게 되면 비효율적으로 된다.

Caching : QuerySet 캐싱을 재사용하는 법

모든 유저를 쿼리셋에서 먼저 호출을 하고 다시 일부분마 호출하면,

모든 유저가 캐싱되어 있기 때문에 첫번째 유저만 가져올때는 모든 유저의 정보를 가져오는 경우 캐쉬에서 가져오게 된다.

Eager Loading 즉시 로딩 : N+1 Problem...

N+1 Problem을 해결하기 위해서 Django에서는 select_related()와 prefetch_related()라는 메소드를 제공한다.

QuerySet 상세

구성요소

1개의 쿼리와 0~N개의 추가쿼리(셋)로 구성되어있다.

QuerySet 하나의 최소한 쿼리를 가지고 있고

select_related(), prefetch_related()