Web アプリケーションを介して実行されるEF クエリと、Profiler によって生成された T-SQL を直接 SQL クエリ ウィンドウに実行する間に、パフォーマンス測定の問題があります。
以下は、Web アプリケーションを介して実行される私の EF クエリです。
IEnumerable<application> _entityList = context.applications
.Include(context.indb_generalInfo.EntitySet.Name)
.Include(context.setup_budget.EntitySet.Name)
.Include(context.setup_committee.EntitySet.Name)
.Include(context.setup_fund.EntitySet.Name)
.Include(context.setup_appStatus.EntitySet.Name)
.Include(context.appSancAdvices.EntitySet.Name)
.Where(e => e.indb_generalInfo != null);
if (isIFL != null)
_entityList = _entityList.Where(e => e.app_isIFL == isIFL);
int _entityCount = _entityList.Count(); // hits the database server at this line
上記の EF クエリを SQL プロファイラーでトレースすると、実行に約221'095 ミリ秒かかったことがわかります。(アプリケーション テーブルには 30,000 以上、indb_generalInfo には 11,000 以上、appSancAdvices には 30,000 以上のレコードがあります)。
ただし、Profiler から T-SQL をコピーしてクエリ ウィンドウから直接実行すると、約4,000 ミリ秒しかかかりません。
なぜそうなのですか?