複雑な django アプリを作成するには、さまざまな場所 (ビュー、テンプレートなど) で ORM オブジェクトを操作する必要があります。ただし、ORM モデルの設計は通常、プロジェクトの開始時に行われます。その段階では、データがどのようにクエリされるか (主にどの ForeignKey が使用されるか) を正確に予測することは非常に困難です。
ORM が作成するクエリの数を最適化できる多くの段階があります。
- select_related() - 指定された ORM 呼び出しで
- prefetch_related() - 指定された ORM 呼び出しで
- モデル ModelManager をオーバーライドして、すべてのクエリに関連するすべてのモデルをプリフェッチする
これを最適化する私の通常の方法は、アプリ全体を作成し、Developer Toolbar を使用して、特定のビューに対して生成されたクエリの数を確認し、それらがどこから来て、どのように回避するかを決定することです (上記のオプションを使用) )。
しかし、この方法はエラーが発生しやすいことがわかりました (たとえば、すべてのビューや他のバックグラウンドの /celery/ メソッドを調べるのを忘れる可能性があります)。ただし、ロジックを作成しているときに最適化を行うのは非効率的であることがわかりました (その時点では ORM 呼び出しではなく、ロジックに集中したいため)。
私の質問は、ORM クエリを最適化するベスト プラクティス (最適な瞬間) は何ですか?