2013-10-29 32 views
0

出於某種原因,這條線:Django的:queryset.latest( 'ATTR')ATTR性能損失

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

作品比顯著慢:在Ajax視圖

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

我的工作上。這種行爲是令人驚訝的一致性,我想知道是否有幕後導致此性能損失(基準20秒,而不是2秒)的任何​​不良魔法

設置:Django 1.4.3,Python 2.7.3,通過調試PyCharm在Windows
雖然我覺得這也發生在我的Heroku的設置雖然

回答

0

如果您只能訪問attr一次,然後不應該有beween兩個查詢任何明顯的差異。

但是,請注意下面的代碼

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 
+0

我只能訪問一次,這是有區別的。我無法解釋它。 – Jonathan

+0

沒有看到代碼,恐怕我沒有任何其他的建議。 – Alasdair