언제 쓰고, 왜 쓰냐?
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번 방법을 사용