Djangoモデルのフィールドnull=Trueの1つに設定しましたが、そのモデルをクエリすると、約10倍遅くなります。ForeignKey(私は使用していselect_related()ます)
変更の前後のPostgresログを見ると、理由の手がかりが得られます。
- を設定する前
null=Trueに、生成されるSQLは、いくつかの内部結合を持つ単一のselectステートメントです。 - を設定した後
null=True、生成されるSQLは結合の1つを除外し、代わりに何千もの同一のselectステートメントが続きます。
これは古典的なn+1クエリの問題であり、これが修正されるまで、パフォーマンスに影響を与えずにフィールドに設定null=Trueするにはどうすればよいですか?ForeignKey