私はDjangoアプリケーションを高速化しようとしています。私が気づく問題の1つは、外部キー関係の逆引き参照が効率的ではないように見えることです。このトリックはDjango ForeignKeyの検索を高速化しますか?
たとえば、教師が多くの生徒を持つことができるシナリオを想像してみましょう。ただし、生徒は1人の教師しか持てません。各学生と教師を関連付ける学生にForeignKeyを割り当てることができます。生徒用のSQLテーブルでは、teacher_id
と呼ばれる列は、生徒が持つ教師を追跡します。
教師Xを持っている生徒を検索するときは、クエリセット全体を取得するためにスチューデントテーブルのすべての行をスキャンする必要がありますが、これは非効率的です。
Djangoを教えると、教師が学生に割り当てられるたびにTeacherテーブルのエントリ、たとえばstudent_id_list
が更新されます。生徒のIDは他の生徒IDのコンマ区切りのリストに追加されます。
このようにして、質問が教師のすべての生徒を探しているときは、生徒を検索するためにこのコンマ区切りの生徒IDのリストを使用できます(IDは主キーです) Studentsテーブルのteacher_id列をスキャンする必要があります)。
Studentテーブルのteacher_id列は引き続き使用されます。データは2回だけ保存されます。
これは私のアプリケーションをより速くしますか?ありがとう!
索引を再作成しないでください。データベースはここで起こっている種類のスキャンに最適化されています。これは、対応する生徒を取得していない場合にのみ有効です(それは非常に便利ではないと思います) – Stefano