优化的Django查询集
我有以下功能来确定谁下载了某本书:优化的Django查询集,django,django-models,django-queryset,Django,Django Models,Django Queryset,我有以下功能来确定谁下载了某本书: @cached_property def get_downloader_info(self): return self.downloaders.select_related('user').values( 'user__username', 'user__full_name') 由于我只使用了两个字段,在其余字段上使用.defer()有意义吗 我试图使用.only(),但我得到一个错误,即某些字段不可JSON序列化 我愿意接受所有关于
@cached_property
def get_downloader_info(self):
return self.downloaders.select_related('user').values(
'user__username', 'user__full_name')
由于我只使用了两个字段,在其余字段上使用.defer()
有意义吗
我试图使用.only()
,但我得到一个错误,即某些字段不可JSON序列化
我愿意接受所有关于优化此查询集的建议(如果有)
谢谢大家! 在尝试所有可能的优化之前,您应该先了解一下ORM生成的SQL查询(您可以或使用类似的工具),看看它有什么慢的地方。在此之后,我建议您使用运行该查询,并找出该查询的缓慢之处。如果由于必须传输大量数据而导致查询速度缓慢,那么仅使用
或延迟是很有意义的。仅在需要检索大量数据时使用和延迟(或值
)可以提供更好的性能,但这并不会使数据库工作更轻松(当然,除非您确实需要读取大量数据)
由于您使用的是Django和Postgresql,因此可以使用manage.py dbshell
获取psql会话,并使用\timing
获取查询计时。是否检查了生成的查询?示例:self.downloaders.select\u related('user').values('user\u username','user\u full\u name')).query
您可以分析它,看看它是否真的值得优化further@karthikr我在哪里可以找到输出,看看是否应该进行优化?您使用的是什么数据库后端?@TommasoBarbugli我使用的是PostgreSql即使它只起了一点作用,优化每个方面是否都有意义?我刚刚安装了Django调试工具栏,谢谢。