問題タブ [select-n-plus-1]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 最新の値に対する SQLAlchemy の効率的なサブクエリ
エンティティの属性の現在の値は、そのエンティティのEntityHistoryテーブルstatus
の最新のエントリとして照会できます。つまり、
N+1 クエリを実行することなく、すべてのエンティティの履歴テーブルから現在の値を熱心にロードする効率的な SQLALchemy 式を作成するにはどうすればよいですか?
モデルのプロパティを書き込もうとしましたが、これを繰り返すと (N+1) ごとにクエリが生成されます。私の知る限り、サブクエリなしでこれを解決する方法はありませんが、データベースではまだ非効率的です。
サンプルEntityHistory
データ:
したがって、エンティティ 1 の現在の値は にz
なり、エンティティ 2 の現在の値は になりますy
。バッキング データベースは Postgres です。
c# - lazy=false の場合でも、Session.Get は N+1 でロードされます
次のようなエンティティがあります。
それらはすべて遅延ロードされていません。
私がそうするとき、私session.Get<User>()
はそのようなクエリを見ます:
それらすべてをセッションキャッシュにプリロードしようとしました:
クエリ付き
しかし、NHibernate はそれらがすべてセッション キャッシュに既にロードされているという事実を無視し、同じ N+1 クエリを生成します! これを修正する方法は?
更新:プリロード
N+1 を削除しますが、NHibernate に 2 回目に文字を読み込ませるのはsession.Get<User>
避けたいことです。
c# - EF Core のネストされた Linq select は、N + 1 SQL クエリになります
「トップ」オブジェクトが 0 ~ N 個の「サブ」オブジェクトを持つデータ モデルがあります。SQL では、これは外部キーで実現されますdbo.Sub.TopId
。
Entity Framework 6 (遅延読み込みオフ) では、この Linq クエリは単一のSQL クエリに変換されます。結果は完全にロードされるため、res[0].prop2
すでにIEnumerable<SomeAnonymousType>
満たされた になります。
ただし、EntityFrameworkCore (NuGet v1.1.0) を使用する場合、サブコレクションはまだ読み込まれておらず、次のタイプです。
データを反復処理するまでデータはロードされないため、N + 1 クエリが発生します。.ToArray()
(コメントに示されているように) クエリに追加すると、データは に完全にロードされますがvar res
、SQL プロファイラーを使用すると、これが 1 つの SQL クエリでは達成されないことがわかります。「トップ」オブジェクトごとに、「サブ」テーブルに対するクエリが実行されます。
最初に指定.Include(t => t.Sub)
しても何も変わらないようです。匿名型の使用も問題ではないようです。new { ... }
ブロックを置き換えてnew MyPocoClass { ... }
も何も変わりません。
私の質問は次のとおりです。すべてのデータがすぐに読み込まれる EF6 と同様の動作を取得する方法はありますか?
注:この例では、次のようにクエリを実行した後、メモリ内に匿名オブジェクトを作成することで問題を解決できることを認識しています。
ただし、これは単なる例です。実際には、オブジェクトの作成を Linq クエリの一部にする必要があります。これは、AutoMapper がこれを使用してプロジェクトの DTO を埋めるためです。
更新:新しい EF Core 2.0 でテストしましたが、問題はまだ存在しています。(2017 年 8 月 21 日)
aspnet/EntityFrameworkCore
問題はGitHub リポジトリで追跡されています:問題 4007
更新: 1 年後、この問題はバージョン で修正されました2.1.0-preview1-final
。(2018-03-01)
更新: EF バージョン 2.1 がリリースされました。これには修正が含まれています。以下の私の答えを見てください。(2018-05-31)
ruby-on-rails - 愛着を避ける方法 N+1
与えられた
各アバターを表示しようとするときにactive_storage_attachments
N +1 クエリを回避するにはどうすればよいですか?active_storage_blobs