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