Select_related

Pang·2021년 10월 24일
0
post-thumbnail

단순하게 말하면 특정 상황에서 (For 문) db에 여러 번 접근하여
불필요한 호출을 막기 위해 사용하는 것이다.

book_list = []
books = Book.objects.all()

for book in books:
	book_list.append({
    	'id' : book.id,
        'name' : 'book.name',
        'writer' : book.writer.name  # (1)
        })
        
return JsonResponse({"message" :"SUCCESS"}, status=201})

이런 코드가 있다고 보자

이러면 (1)번에서 for문이 한 번 반복 될 때마다 book에있는 writer에 있는 db를 호출하여서
name울 가져올 것이다.

안에 데이터가 별로 없다면 크게 상관 없지만

데이터가 10000개만 넘어가도 10000번을 매 번 불러오는 것이므로
데이터 상으로나 속도 상으로나 엄청난 손해이다.

이를 방지하기 위해서

select_related를 통해 미리 필요한 정보를 호출한후 계속 호출할 필요 없이 거기서 사용하는 방법이 있다.

book_list = []
books = Book.objects.all().select_related("wirter") #(2)

for book in books:
	book_list.append({
    	'id' : book.id,
        'name' : 'book.name',
        'writer' : book.writer.name  # (1)
        })
        
return JsonResponse({"message" :"SUCCESS"}, status=201})

첫 번째와 다른 점은 (2)번 부분에서 미리 select_related로 필요한 데이터 베이스를 미리 호출해주었기
때문에 아래에서는 더이상 for문을 돌 때마다 데이터베이스에 접근 하는 것이 아니라

이미 위에서 정의한 books에 의해서 1번의 호출로 코드를 수행할 수 있다.

profile
팡 화이토

0개의 댓글