order_by와 인덱싱에서 주의할 점

hyuckhoon.ko·2021년 7월 12일
0

What I learned in first year

목록 보기
91/146

1. order_by 와 인덱싱 조합은 순서를 보장하지 않으며 중복이 발생한다.

queryset = (
    Product.objects.select_related("brand", "product_grade")
    .filter(filters)
    .order_by(sorter)
   	.prefetch_related(
    	"productthumbnail_set",
        "pricehistory_set",
        "productdetail_set",
        "useruploadproductimage_set",
    )
    .distinct()[offset: offset + limit]
)
for product in queryset:
	... (생략) ... 

order_by를 사용하면 매번 쿼리를 한다.



2. queryset 을 list로 변환한다.

queryset = list(
                Product.objects.select_related("brand", "product_grade")
                .filter(filters).order_by(sorter)
                .prefetch_related(
                    "productthumbnail_set",
                    "pricehistory_set",
                    "productdetail_set",
                    "useruploadproductimage_set",
                )
            )
            
for product in queryset[offset: offset + limit]:
	... (생략) ... 

https://stackoverflow.com/questions/25961092/django-random-orderingorder-by-makes-additional-query/25961349

0개의 댓글