我正在遍历13,000个内存中的城市名称,并生成查询以进行过滤。我遇到了我无法解释的事情...
当循环只有一行时:
cities = City.objects.filter(name__iexact=city)
性能几乎是每秒800个项目
当循环测量返回的集合的长度时...
cities = City.objects.filter(name__iexact=city)
num_citles = len(cities)
性能下降到每秒8个项目
我无法解释性能下降的原因。显然,我缺少了某些东西...为什么要对始终在0到3个项目之间的内存阵列中的项目数进行计数,将性能降低x100倍?
Django查询集是惰性的,因此QuerySet.filter
实际上不会评估查询集,即在数据库中运行查询。当您len
在其上运行函数时,将对其进行评估,并且在运行过滤器后仅从计数中获取数据库中的所有项目。因此,count
速度非常慢。
如果您COUNT
在数据库级别运行,将获得更好的性能:
num_cities = City.objects.filter(name__iexact=city).count()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句