Почему queryset.iterator () показывает низкую производительность - PullRequest
0 голосов
/ 29 декабря 2018
# I am using postgresql
# queryset run complex SQL joining 4 tables

print(queryset.count()) # print 30000

# it takes 5 sec
for i in queryset:
    print(i.arg)

# it takes 10 sec
for i in queryset.iterator(chunk_size=30000):
    print(i.arg)

Я упрощаю ситуацию, в которой я страдал, как описано выше.

iterator() занимает больше времени примерно в 2 раза.

Конечно, я понимаю, что iterator() нужно больше DB-побочные операции и другие запросы, такие как DECLARE, FETCH и CLOSE, потому что он использует DB CURSOR для внутреннего использования (на практике я проверяю, чтобы Django отправлял эти запросы через журнал DB).

Однако,Я не думаю, что эти дополнительные операции займут так много времени.Он даже извлечет все строки в одном запросе FETCH, поскольку chunk_size совпадает с общим числом строк.

Мне интересно, ожидается ли эта ситуация одна или нет.Если ожидается, почему это занимает так много времени?

...