优化的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调试工具栏,谢谢。