由于某种原因,这一行:
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设置上但是
答案 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