我有以下功能来确定谁下载了某本书:
@cached_property
def get_downloader_info(self):
return self.downloaders.select_related('user').values(
'user__username', 'user__full_name')因为我只使用两个字段,所以在剩下的字段上使用.defer()是否有意义?
我试着使用.only(),但是我得到了一个错误,一些字段不能被JSON序列化。
我愿意接受所有的建议,如果有的话,优化这个查询集。
谢谢!
发布于 2015-12-28 18:55:41
在尝试每一种可能的优化之前,您应该掌握ORM生成的SQL查询(您可以使用打印出来或使用类似于django调试工具栏的东西),看看它的速度有多慢。之后,我建议您使用解释分析运行该查询,并找出查询的速度。如果查询速度慢,因为需要传输大量数据,那么使用only或defer就更有意义了。只有在需要检索大量数据时,使用only和defer (或values)才能提供更好的性能,但这不会使数据库工作变得更容易(当然,除非您必须读取大量数据)。
由于您使用Django和Postgresql,所以可以使用manage.py dbshell获得psql会话,并使用\timing获取查询时间。
https://stackoverflow.com/questions/34497353
复制相似问题