Django ORM性能问题

杰森

我正在遍历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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章