Django:queryset.latest('attr')。attr性能惩罚

时间:2013-10-29 10:45:11

标签: django django-queryset

由于某种原因,这一行:

val = queryset.latest('attr').attr

的工作速度明显慢于:

obj = queryset.latest('attr')
val = obj.attr

在ajax视图中我正在努力。这种行为令人惊讶地一致,我想知道幕后是否有任何不良魔法导致这种性能损失(基准测试〜20s而不是~2s)

设置:Django 1.4.3,Python 2.7.3,在Windows上通过PyCharm进行调试 虽然我认为这也发生在我的Heroku设置上但是

1 个答案:

答案 0 :(得分:0)

如果您只访问attr一次,则两个查询之间不应有任何明显的差异。

但请注意以下代码

val = queryset.latest('attr').attr
val = queryset.latest('attr').attr
val = queryset.latest('attr').attr

每次都会从数据库中获取对象,从而导致3次数据库查询。如果将queryset.latest('attr')分配给对象,则只有1个数据库查询。

obj = queryset.latest('attr')
val = obj.attr
val = obj.attr
val = obj.attr