0
我有一些看起來像這樣:什麼輕量級的Django緩存選項有一個簡單的內部循環,在一個會話?
pages = Page.objects.prefetch_related("sections","sections__tiles").all()
for page in pages:
for section in page.sections.all():
for tile in section.tiles.all():
print tile.author
# more stuff to build each page
這擊中SQL層曾經爲初始查詢,然後每一次循環(N + 1)。 但是,SQL查詢的最佳數量是1 +(唯一作者的數量)。
我實現了一個簡單的基於哈希的「作者」現金,並大幅縮短了加載時間。
但它感覺凌亂。有什麼更清潔的選項,用於減少單個事務內的SQL開銷 ?
不幸的是,這扭曲了優化SQL的代碼。這裏所需的操作是構建頁面:以另一種方式運行它會令人困惑。 – Bryce 2014-09-25 22:27:36
Ahhh,對不起,我錯過了關於在第一個示例中構建頁面的評論。 – 2014-09-25 22:33:14
您是否嘗試過:pages = Page.objects.prefetch_related(「sections」,「sections__tiles」)。all()。select_related('sections__tiles__author') – 2014-09-25 22:42:29