Usage of iterator will save memory preventing caching on the Django part, but with values_list you force Django to return a list of values instead of a QuerySet object. Have you tried using iterator in combination with getting data in chunks(see http://www.mellowmorning.com/2010/03/03/django-query-set-iterator-for-really-large-querysets/ )? If yes, and you didn't get better performance, then LGTM