我在我的Django模型中的一个ForeignKey字段上设置了null=True,现在当我查询该模型时,它大约慢了10倍。(我正在使用select_related())。在更改之前和之后查看我的Postgres日志可以找到原因的线索:
在设置null=True之前,生成的SQL是一个带有几个内部连接的单个选择语句。
在设置null=True之后,生成的SQL省略了其中一个连接,并代之以数千个相同的选择语句。
所以这是经典的n+1查询问题,在此得到解决之前,我如何在ForeignKey字段上设置null=True而不影响性能?
在设置null=True之前,生成的SQL是一个带有几个内部连接的单个选择语句。
在设置null=True之后,生成的SQL省略了其中一个连接,并代之以数千个相同的选择语句。
所以这是经典的n+1查询问题,在此得到解决之前,我如何在ForeignKey字段上设置null=True而不影响性能?
depth
参数或字段名称限定了select_related
的范围? - trinchetnull=True
。 - trinchet