# 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
совпадает с общим числом строк.
Мне интересно, ожидается ли эта ситуация одна или нет.Если ожидается, почему это занимает так много времени?