为什么queryset.iterator()表现不佳

时间:2018-12-29 15:56:26

标签: python django postgresql-9.5

# 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端操作和更多请求,例如DECLAREFETCHCLOSE,因为它正在使用DB {{1} }内部(实际上,我检查Django是否通过数据库日志发出这些请求)。

但是,我认为这些额外的操作不会花费那么多时间。由于CURSOR与总行数相同,因此它甚至会在一个FETCH请求中提取所有行。

我想知道这种情况是否会发生。如果可以预料,为什么要花那么多时间?

0 个答案:

没有答案