0

出于某种原因,这一行:

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 设置中

4

1 回答 1

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
于 2013-10-29T10:53:22.433 回答