Django

Django のパフォーマンス

クエリ最適化、N+1 問題、データベースインデックス、connection pooling、プロファイリング、モニタリング

24 面接問題·
Senior
1

Django ORM のクエリに関連する最も一般的なパフォーマンスの問題は何ですか?

回答

N+1 問題は Django ORM で最も一般的なパフォーマンスの問題です。最初のクエリで N 個のオブジェクトを取得し、その後関連オブジェクトを取得するために追加で N 回のクエリが実行されるときに発生します。たとえば、記事を反復処理してその著者にアクセスすると、1 回の結合クエリではなく記事ごとに 1 回ずつクエリが生成されます。

2

ForeignKey リレーションで N+1 問題を解決するにはどのメソッドを使用すべきですか?

回答

select_related() は ForeignKey および OneToOneField リレーションで N+1 問題を解決する適切なメソッドです。SQL の結合を実行し、関連オブジェクトを 1 回のクエリで取得します。prefetch_related() は ManyToMany リレーションや逆参照リレーション(ForeignKey reverse)に使用されます。

3

select_related() ではなく prefetch_related() を使用すべきなのはどんなときですか?

回答

prefetch_related() は ManyToMany リレーションと逆参照リレーション(ForeignKey reverse)のために設計されています。SQL の結合を行う select_related() とは異なり、prefetch_related() は別のクエリを実行して結合を Python 側で行います。これにより、many-to-many リレーションで SQL 結合を行ったときに発生するデータの重複を回避します。

4

Prefetch() を使って prefetch_related() のクエリをカスタマイズするにはどうすればよいですか?

5

フィールドにデータベースインデックスを追加する主な利点は何ですか?

+21 面接問題

次の面接に向けてDjangoをマスター

すべての問題、flashcards、技術テスト、コードレビュー演習、面接シミュレーターにアクセス。

無料で始める