select_related & prefetch_related
Queryset:
query
란 데이터베이스에 정보를 요청해주는 것을 의미하며 파이썬으로 작성한 코드가 sql로 매핑되어 queryset
이라는 자료 형태로 값이 넘어오게 됩니다. 이는 순회가능한 데이터로서 이를 이용해여 1개 이상의 데이터를 불러와 사용할 수 있습니다.
queryset
의 특이한 점은 Lazy
한 특성입니다. 미리 db에 접근해서 값을 불러오는 것이 아니라, 출력 등과 같이 필요한 순간에 sql로 매핑되고 이를 통해 db 에 접근해 값을 가져오게 됩니다.
특징
select_related
와 prefetch_related
는 하나의 QuerySet을 가져올 떄, 미리 related objects들 까지 다 불러와 주는 함수입니다.
- 비록 query를 복잡하게 만들긴 하지만, 그렇게 불러온 data들은 모두 cashe에 남아있게 되므로 DB에 다시 접근해야 하는 수고를 덜어줄 수 있습니다.
- 이렇게 두 함수 모두 DB에 접근하는 수를 줄여, 성능을 향상시켜준다는 측면에서 공통점은 있으나 방식에는 차이점이 있습니다.
select_relate
- SQL의 JOIN을 사용하는 특성상 foreign-key, one-to-one와 같은 정참조 상태에서만 가능합니다.
- 한번 정보를 가져오게 되면 이후로는 가져오지 않는다. 요거를 안 쓰게 되면 접근할 때마다 정보를 가져오게 된다.
- 정보를 가져오기 위해 다시 DB에 접근하지 않고 cashe에서 꺼내 쓰면된다.