〜 20K レコードを取得し、2 つの子エンティティを含める単純な EF 実装があります。
using (InsightEntities context = new InsightEntities())
{
return context.Accounts
.Include(x => x.Division)
.Include(x => x.Division.Company)
.OrderBy(x => x.ID)
.AsNoTracking()
.ToList();
}
SQL プロファイラーを使用して EF 呼び出しをプロファイリングすると、後続の呼び出しであっても、SQL コマンドの実行時間は ~1.2 秒です。しかし、EF が生成しているのと同じ SQL をコピーして貼り付け、SSMS を介して直接実行すると、所要時間はその半分になります。
以下は、EF 呼び出し (赤い楕円) と直接呼び出し (緑の楕円) のスクリーンショットです。
EF がデータをオブジェクトにマッピングしたり、リレーションシップを解釈したりするなど、多くの作業を行っていることは理解していますが、クエリだけで、同じクエリを直接実行するよりも 2 倍の時間がかかるのはなぜでしょうか? クエリを最適化する可能性のある既定の EF 接続文字列への変更はありますか?
(クエリ自体は、すべての外部キーのインデックスで完全に最適化されていることを付け加えておきます。)
ありがとうございました!