为什么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秒。

为什么EF获取数据这么慢?

性能改进:

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();