# 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 {{1} }内部(实际上,我检查Django是否通过数据库日志发出这些请求)。
但是,我认为这些额外的操作不会花费那么多时间。由于CURSOR
与总行数相同,因此它甚至会在一个FETCH
请求中提取所有行。
我想知道这种情况是否会发生。如果可以预料,为什么要花那么多时间?