[解決済み] ORM(Object-Relational Mapping)における「N+1 selects問題」とは?
2022-03-14 12:39:10
質問
オブジェクトリレーショナルマッピング(ORM)の議論では、一般的に「N+1セレクト問題」が問題視されていますが、オブジェクトの世界では単純に見えることでも、データベースへの問い合わせを多くしなければならないことと関係があるのだと理解しています。
どなたか、この問題についての詳しい説明をお持ちの方はいらっしゃいませんか?
解決方法を教えてください。
のコレクションがあるとします。
Car
オブジェクト (データベース行) があり、それぞれの
Car
のコレクションを持っています。
Wheel
オブジェクト(行でもある)を作成します。 言い換えれば
Car
→
Wheel
は1対多の関係です。
ここで、すべての車を繰り返し処理し、それぞれの車について、ホイールのリストを出力する必要があるとします。素朴なO/R実装では、次のようになります。
SELECT * FROM Cars;
そして
に対して、それぞれの
Car
:
SELECT * FROM Wheel WHERE CarId = ?
つまり、Carsのselectが1つあり、さらにN個のselectがあり、ここでNは車の総数です。
あるいは、すべてのホイールを取得し、メモリ内でルックアップを実行することもできます。
SELECT * FROM Wheel
これにより、データベースとの往復回数がN+1回から2回に減少します。 ほとんどのORMツールは、N+1セレクトを防ぐためのいくつかの方法を提供しています。
参考にしてください。 HibernateによるJavaの永続化 第13章をご覧ください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン