파파비의 블로그

[python / 파이썬] Django Query Performance 본문

개발/django

[python / 파이썬] Django Query Performance

N. Dave 2021. 6. 8. 14:15
반응형

Database system에 여러번 호출하는 것은 당연히 퍼포먼스상으로 좋지 않다.

Django는 그런 것에 대한 나름대로의 퍼포먼스를 위한 최적화가 되어있다.

 

장고는 DB에 대한 query에 대해, 해당 output을 활용하기 전까지는 변수에 명령어 형태로 저장한다.

그리고 최종적으로 data가 활용되는 시점에서 각 명령어들을 실행하여 최적의 퍼포먼스로 행하게 된다.

 

예를 들어, 아래와 같은 코드는 db와 몇번 contact 했을까?

best_sellers = Books.objects.filter(is_bestseller="True")
amazing_best_sellers = best_sellers.filter(rating__gt=4)
print(amazing_best_sellers)

1번이다.

 

먼저 print가 실행될때 db를 한번 접촉하고, 그 뒤로는 best_seller에 cashed 되기 때문에 cashed된 data를 활용해서

django는 filter를 한번 더 활용한다.

 

참고로 2번째 줄은 query_set을 토대로 다시 query를 하는 것을 알 수 있는데, 언제든 쿼리 결과를 토대로 다시 한번 쿼리를 날리는 것이 가능하다.

 

그런데 만약 변수에 query 값을 저장하지 않는다면?

그러면 cashed되지 않아 재사용할 수 없어 여러번 db와 소통하게 되어 퍼포먼스에 영향을 미치게 된다.

print(Book.objects.filter(rating__gt=4))
print(Book.objects.filter(rating__gt=4))

# db와 통신을 2번함

 

 

반응형
Comments