理解 QuerySets
是用简单代码获得高效率的关键。特别是在:
要避免执行过程中的问题,一定要理解:
除了缓存整个 QuerySet
之外,还缓存了 ORM
对象的属性结果。 通常,不可调用的属性将被缓存。 例如,假设示例博客模型:
>>> entry = Entry.objects.get(id=1)
>>> entry.blog # Blog object is retrieved at this point
>>> entry.blog # cached version, no DB access
但一般来说,可调用对象属性每次都会触发数据库查询:
>>> entry = Entry.objects.get(id=1)
>>> entry.authors.all() # query performed
>>> entry.authors.all() # query performed again
要使用 QuerySet
的缓存行为,你可能需要使用 with
模板标签。
当你有很多对象时,QuerySet
的缓存行为可能会导致大量的内存被使用。在这种情况下,iterator()
可能会有帮助。
QuerySet.explain()
为你提供有关数据库如何执行查询的详细信息,包括使用的索引(indexes)和连接(jion)。这些细节可能会帮助你找到可以更有效地重写的查询,或确定可以添加的索引以提高性能。
备案信息: 粤ICP备15087711号-2
Copyright © 2008-2024 啊嘎哇在线工具箱 All Rights.
本站所有资料来源于网络,版权归原作者所有,仅作学习交流使用,如不慎侵犯了您的权利,请联系我们。