2017-05-19 5 views
1

장고 queryset에서 반환 된 큰 데이터 집합이 있고 그것을 반복하고 싶습니다. 쿼리 세트를 직접 반복하거나 결과를 변수에 저장하고 반복해야합니까? 장고 쿼리 집합 또는 변수를 반복해야합니까?

results = item in Model.objects.all(): 
for item in results: 
    do_something() 

for item in Model.objects.all(): 
    do_something() 

또는

는 지금까지 내가 아는 한, 변수는 힙에 저장되고 그 안전한 곳의 검색어 반복의 경우와 같이, 결과는 메인 메모리에 저장됩니다.

공간과 속도면에서 어느 것이 효율적입니까?

+0

두 변수 모두 동일하지만 변수를 한 줄만 더 사용하면 모든 것을 메모리에 저장하고 두 번째로 데이터베이스에 쿼리하지 않아도됩니다. 너는 이해할 수 있고, – Exprator

답변

2

차이는 없습니다. 파이썬은 힙의 데이터와 "메인 메모리"(또는 스택)를 구별하지 않습니다. CPython에서 적어도 모든 데이터는 힙에 저장되고 스택에는 해당 데이터에 대한 참조가 포함됩니다. this question을 참조하십시오.

유일한 고려 사항은 같은 범위에서 다시 쿼리 세트를 참조해야하는지 여부입니다. 그렇다면 변수에 저장하십시오. 그렇지 않다면, 그럴 필요가 없습니다.

0

데이터 세트가 거대한 경우 iterator을 사용하여 메모리로드를 줄이고 성능을 향상시킬 수 있습니다 (예 :

실제로 필요한 경우에만 수행해야합니다. 쿼리 세트 캐싱을 사용할 수 없도록 설정해야합니다. 이 후에 쿼리 세트를 다시 사용하면 성능이 떨어집니다.