Queryset.exists()가 Queryset.count()보다 효율적인 이유
import models
queryset = models.Hound.objects.filter(is_asleep=True)
if queryset.count() > 0:
return "run away!"
else:
return "coast is clear"
숙련된 Django 개발자는
count()
의 오용에 대해 웃을 수 있습니다. 나는 결코 그런 실수를 하지 않을 것입니다! 문제는 개발자가 섬이 아니라는 것입니다. 시간이 지남에 따라 개발자는 팀을 변경하고 기술 부채가 누적된 브라운필드 코드베이스를 상속하며 주니어 개발자가 작성한 코드를 검토합니다. 따라서 다음이 중요합니다.exists
더 빠르게게시물의 끝에서 이 안티 패턴을 쉽게 찾아 수정하는 방법을 보여 드리겠습니다.
능률
비교
queryset.count()
는 확인queryset.exists()
보다 덜 효율적입니다. 위의 예는 다음과 같이 읽기 어렵고 덜 효율적인 변형입니다.import models
queryset = models.Hound.objects.filter(pk=1)
if queryset.exists():
return "run away!"
else:
return "coast is clear"
Django docs은 개수만 원하는 경우에는
querySet.count()
를 사용하고, 하나 이상의 결과가 존재하는지 확인하려는 경우에만 queryset.exists()
를 사용하도록 지시합니다.이 조언이 필요한 이유는
queryset.count()
가 합계를 계산하기 위해 데이터베이스 테이블의 모든 행을 스캔하는 SQL 작업을 수행하기 때문입니다. 반면에 queryset.exists()
는 단순히 the most optimized way에서 단일 레코드를 읽습니다.select_related
및 distinct
를 지웁니다.코드베이스가 queryset.count를 오용하고 있습니까?
시간이 지남에 따라 기술 부채가 코드베이스에 빠져들기 쉽습니다. django.doctor에서 확인하거나 review your GitHub PRs에서 확인할 수 있습니다.
또는 시도해 보십시오Django refactor challenges .
Reference
이 문제에 관하여(Queryset.exists()가 Queryset.count()보다 효율적인 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/codereviewdoctor/why-queryset-exists-is-more-efficient-than-queryset-count-2f3h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)