为什么EF获取数据这么慢?
本文关键字:数据 EF 获取 为什么 | 更新日期: 2023-09-27 18:04:15
我还在学习如何使用EF,但我不知道为什么要花这么长时间才能从数据库中提取数据。
我的EF语句:
IEnumerable<DOC_TRACK_MAIN> data;
Stopwatch st = new Stopwatch();
st.Start();
data = context.TABLE1.AsNoTracking().Include(x => x.TABLE2).AsNoTracking().Where(x => startDate <= DbFunctions.TruncateTime(x.LAST_UPDATED_DATE) && endDate >= DbFunctions.TruncateTime(x.LAST_UPDATED_DATE));
var result = data.Where(x => x.TABLE2.MAP_TYPE_CODE.Trim().ToUpper() == reportCode.Trim().ToString()).ToList();
st.Stop();
var cnt = result.Count();
var tm = st.Elapsed;
return result;
当我在TOAD中测试类似的查询时,它大约需要5秒。
性能改进:
OP的原始查询: 一14分钟
解决方案如下: 0.06 Min
改进%: 1800%
请重写您的EF查询如下所示,并让我们知道现在的性能。
context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading for this query only
data = context.TABLE1.Where(x => startDate <=
DbFunctions.TruncateTime(x.LAST_UPDATED_DATE) && endDate >=
DbFunctions.TruncateTime(x.LAST_UPDATED_DATE)).Include(x => x.TABLE2);
var result = data.Where(x => x.TABLE2.MAP_TYPE_CODE.Trim().ToUpper() ==
reportCode.Trim().ToString()).AsNoTracking().ToList();