qdo*_*dot 3 sql memory django optimization
我正在优化此行的内存负载(~2GB,离线记帐和分析例程):
l2 = Photograph.objects.filter(**(movie.get_selectors())).values()
有没有办法说服django在获取值()时跳过某些列?
具体来说,例程获取匹配特定条件的表的所有行(db已经过优化并且非常快速地执行),但是python处理起来有点太多了 - 每行都引用了一个长字符串,存储了url缩略图.
我只需要每行三个字段,但是,如果包含所有字段,它突然消耗大约5kB /行,这可悲地将RAM推到极限.
退房的QuerySet方法,只.当您声明only要立即加载某些字段时,QuerySet管理器将不会拉入对象中的其他字段,直到您尝试访问它们为止.
如果你必须处理ForeignKeys,那也必须预先获取,然后检查select_related
Django文档上面的两个链接都有很好的例子,应该澄清它们的用法.
看看Django Debug Toolbar它带有一个debugsqlshell管理命令,当你在django/python shell上玩你的模型时,它可以让你看到生成的SQL查询以及所花费的时间.