Django4.0 數(shù)據(jù)庫訪問優(yōu)化-理解QuerySet

2022-03-16 18:02 更新

理解 ?QuerySets ?是用簡單代碼獲得高效率的關(guān)鍵。特別是在:

理解 QuerySet 的執(zhí)行過程

要避免執(zhí)行過程中的問題,一定要理解:

  • QuertSets 是惰性的。
  • 當(dāng) 它們被計(jì)算時(shí)。
  • 數(shù)據(jù)如何保存在內(nèi)存中。

理解緩存屬性

除了緩存整個(gè) ?QuerySet ?之外,還緩存了 ?ORM ?對(duì)象的屬性結(jié)果。 通常,不可調(diào)用的屬性將被緩存。 例如,假設(shè)示例博客模型:

>>> entry = Entry.objects.get(id=1)
>>> entry.blog   # Blog object is retrieved at this point
>>> entry.blog   # cached version, no DB access

但一般來說,可調(diào)用對(duì)象屬性每次都會(huì)觸發(fā)數(shù)據(jù)庫查詢:

>>> entry = Entry.objects.get(id=1)
>>> entry.authors.all()   # query performed
>>> entry.authors.all()   # query performed again

使用 with 模板標(biāo)簽

要使用 ?QuerySet ?的緩存行為,你可能需要使用 ?with ?模板標(biāo)簽。

使用 iterator()

當(dāng)你有很多對(duì)象時(shí),?QuerySet ?的緩存行為可能會(huì)導(dǎo)致大量的內(nèi)存被使用。在這種情況下,?iterator()? 可能會(huì)有幫助。

使用 explain()

?QuerySet.explain()? 為你提供有關(guān)數(shù)據(jù)庫如何執(zhí)行查詢的詳細(xì)信息,包括使用的索引(indexes)和連接(jion)。這些細(xì)節(jié)可能會(huì)幫助你找到可以更有效地重寫的查詢,或確定可以添加的索引以提高性能。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)