Django4.0 数据库访问优化-理解QuerySet
理解 QuerySets
是用简单代码获得高效率的关键。特别是在:
理解 QuerySet 的执行过程
要避免执行过程中的问题,一定要理解:
- QuertSets 是惰性的。
- 当 它们被计算时。
- 数据如何保存在内存中。
理解缓存属性
除了缓存整个 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
使用 with 模板标签
要使用 QuerySet
的缓存行为,你可能需要使用 with
模板标签。
使用 iterator()
当你有很多对象时,QuerySet
的缓存行为可能会导致大量的内存被使用。在这种情况下,iterator()
可能会有帮助。
使用 explain()
QuerySet.explain()
为你提供有关数据库如何执行查询的详细信息,包括使用的索引(indexes)和连接(jion)。这些细节可能会帮助你找到可以更有效地重写的查询,或确定可以添加的索引以提高性能。