出于某种原因,这行代码如下:
val = queryset.latest('attr').attr工作速度明显慢于:
obj = queryset.latest('attr')
val = obj.attr在我正在处理的ajax视图中。这种行为出人意料地一致,我想知道幕后是否有任何不好的魔法导致这种性能损失(基准测试为~20秒而不是~2秒)
设置: Django 1.4.3,Python2.7.3,在Windows上通过PyCharm调试
尽管我认为这也会发生在我的Heroku设置上
发布于 2013-10-29 18:53:22
如果您只访问attr一次,那么两个查询之间应该没有任何明显的区别。
但是,请注意以下代码
val = queryset.latest('attr').attr
val = queryset.latest('attr').attr
val = queryset.latest('attr').attr每次都会从数据库中获取对象,从而导致3次数据库查询。如果将queryset.latest('attr')赋值给一个对象,将只有一个数据库查询。
obj = queryset.latest('attr')
val = obj.attr
val = obj.attr
val = obj.attrhttps://stackoverflow.com/questions/19655996
复制相似问题