私は二度どのグループのデータのクエリを持っています:GROUPBY GROUPBYおよびすべての()のパフォーマンス内部
var query = (from a in Context.SetA()
from b in Context.SetB().Where(x => x.aId == a.Id) // 1-to-many
from c in Context.SetC().Where(x => x.bId == b.Id) // 1-to-many
group new {...} by new {...} into g
select new
{
g.Key.X,
g.Key.Y,
g.Sum(x => x....), // etc, lots of Sums
});
from (q in query
group q by true
select new
{
g.Key.Z,
g.Sum(x => x.....), // etc, lots of Sums
});
このすべてがうまく機能、およびパフォーマンスが許容可能です。今度は、両方のグループにAll(またはAny、差はありません)を追加すると、
パフォーマンスが大幅に低下します。 10倍速になり、5秒から50秒になります。数字は正確ではなく、ちょうどアイデアを得るためです。
私は1対多の関係が3つあり、すべてのレベル(親の合計、子の合計、孫の合計)でサマリーを行っているので、2回グループ化しています。
パフォーマンス向上のために何ができるでしょうか?
おそらく、「フラグ」をカバーしないマルチフィールドインデックスのインデックスがあります。これを確認するには、EFによって生成されたさまざまなクエリのクエリ実行計画を分析する必要があります。 – xanatos