본문 바로가기

Python/Django

Python Django: select_related

728x90
반응형

언제 쓰고, 왜 쓰냐?

1) select_related 예시

1. my_fr = MyFruit.objects.get(fruit_id=fr_id, customer=customer)
2. my_fr = MyFruit.objects.select_related('fruit').get(fruit_id=fr_id, customer=customer)

1과 2는 어떤게 더 효율적이거나 좋은 방법일까?
-------------

1과 2 중 더 효율적인 방법은 상황에 따라 다르다.

 

my_fr = MyFruit.objects.get(fruit_id=fr_id, customer=customer)

 

이 방법은 MyFruit 객체를 가져올 때, 연결된 fruit 객체는 가져오지 않습니다. 

따라서 이후에 my_fr.fruit에 접근하면 추가적인 쿼리가 발생합니다. 
이를 "지연 로딩"이라고 합니다. 만약 fruit 객체에 대한 정보를 이후에 사용할 필요가 없다면, 이 방법이 더 효율적일 수 있습니다.

 


my_fr = MyFruit.objects.select_related('fruit').get(fruit_id=fr_id, customer=customer)

 

이 방법은 select_related()를 사용하여, MyFruit 객체와 연결된 fruit 객체를 함께 가져옵니다. 
--> 실제 쿼리를 보면, INNER JOIN 으로 가져옴
이는 단일 쿼리로 두 객체를 모두 로드하므로, 이후에 my_fr.fruit에 접근할 때 추가적인 쿼리가 발생하지 않습니다. 
이를 "즉시 로딩"이라고 합니다. 만약 이후에 fruit 객체에 대한 정보를 사용할 계획이라면, 이 방법이 더 효율적일 것입니다.

결론적으로, fruit 객체에 접근할 필요가 있는지에 따라 적절한 방법을 선택.

fruit 객체에 접근할 계획이라면 2번 방법이 더 효율적이며,
그렇지 않다면 1번 방법을 사용

728x90
반응형