在django中,我试图理解预取:
在预取之后,我有两个针对循环的场景
symbollist = SymbolList.objects.prefetch_related('some_related_name')[0:10]
for i in range(0,10):
print(symbollist[i].some_related_name)
现在它调用sql N+1次
其中作为
symbollist = SymbolList.objects.prefetch_related('some_related_name')[0:10]
for symbol in symbollist:
print(symbol.some_related_name)
这将只调用两个sql
为什么
您将symbol_list
Queryset限制为10个对象,并使用预取相关为其缓存相关数据
但是您正在遍历数据库中的所有对象(注意计数(
for i in range(0,symbollist.count()):