我在我的觀點一個具有操作減少數據庫訪問時,在多個類似的對象相同的查詢
order_details = [order.get_order_details() for order in orders]
現在order.get_order_details()
運行一個數據庫查詢。所以對於目前的情況。根據orders
的大小,數據庫訪問的數量將非常龐大。
在使用緩存之前,有什麼可以加快速度的嗎?
是否有可能將所有選擇操作合併到一個數據庫操作中?
使用transaction.atomic()
將使其成爲原子事務增加任何性能?因爲從技術上來說,查詢將立即發送而不是單獨發送,對嗎?
編輯:是否有任何設計更改/模式可以避免這種情況?
編輯:
def get_order_details(self):
items = Item.objects.filter(order=self)
item_list = [item.serialize for item in items]
return {
'order_details': self.serialize,
'item_list': item_list
}
你想['select_related'(https://docs.djangoproject.com/en/1.11/ref/models/querysets/#select-related)或者是'prefetch_related '(正下方) –
哦,那麼我們需要看看'get_order_details'是什麼樣的。我唯一的猜測是使用'__in'運算符。我無法做出比猜測更少的信息。 –
對不起,我誤解了你之前的評論。我以爲你說過在訂單上使用select_related。我認爲可以通過它解決。謝謝:)請把它作爲答案,我可以接受它。 –