ホームページ > データベース > mysql チュートリアル > NHibernate QueryOver with Fetch により複数のデータベース クエリが発生するのはなぜですか? それを最適化するにはどうすればよいですか?

NHibernate QueryOver with Fetch により複数のデータベース クエリが発生するのはなぜですか? それを最適化するにはどうすればよいですか?

DDD
リリース: 2025-01-04 12:04:35
オリジナル
346 人が閲覧しました

Why Does NHibernate QueryOver with Fetch Cause Multiple Database Queries, and How Can I Optimize It?

NHibernate QueryOver with Fetch Incurring Multiple Query Executions

親エンティティとその子コレクションを取得するために Fetch 句を使用して QueryOver を実行すると、多くの場合、過剰なデータベースヒットが発生します。この現象は、NHibernate が子コレクション内の行ごとに個別のクエリを発行するために発生します。

これを理解するには、UserRole エンティティと UsersInRole コレクションを使用したシナリオを考えてみましょう。最初のクエリは UserRole エンティティを取得します:

SELECT ... FROM UserRoles
left outer join UsersInRoles on ...
ログイン後にコピー

取得された UserRole ごとに、NHibernate は別のクエリを実行して UsersInRole コレクションを取得します。その結果、次の形式の多数のクエリが生成されます。 >この動作を最適化するために、NHibernate では HasManyToMany で BatchSize プロパティを設定できるようになります。 mapping:

SELECT ... FROM UsersInRoles
left outer join UserRoles on ...
WHERE UserRoles.UserId=?
ログイン後にコピー

このオプションを指定すると、NHibernate は子コレクションをバッチでロードし、データベース クエリの数を最大 1 (バッチ サイズ / ページ サイズ) に減らします。これにより、過剰なデータベース ヒットを回避しながら、関連データを効率的に取得できるようになります。

以上がNHibernate QueryOver with Fetch により複数のデータベース クエリが発生するのはなぜですか? それを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート