.NET LINQ查询准备问题

时间:2019-04-19 15:37:50

标签: c# mysql performance entity-framework linq

我们在linq查询中遇到问题。在选择查询中,多个表与联接相关联。记录过滤器应用于连接部分的位置。

此查询运行良好,并且在过去8到9个月内的时间内给出了正确的结果。 突然,花了大约2分钟的时间才能检索到具有相同联接并消耗99%CPU的记录。

此查询始终在用户登录时使用,因此可以确保它在过去直到问题发布之前一直运行良好。 任何人都可以帮助为什么这个问题突然发生吗?

var entityList = (from x in db.TableA
    join y in db.TableB on x.Id equals y.TableC.TableAId into g
    from d in g.DefaultIfEmpty()
    where d.EndDateTime == null &&
          (d == null || d.TableE.PersonID == personId) &&
          x.EndDateTime == null &&
          d.TableC.EndDateTime == null &&
          x.TableE.PersonID == personId
    select new
    {
        Col1 = d != null ? d.TableC.TableD.Id : 0,
        Col2 = d != null ? d.TableC.Id : 0,
    }).AsQueryable();

1 个答案:

答案 0 :(得分:0)

如果该框架将d == null变成d = null而不是d IS NULL,那就是一个严重的缺陷。

OR可能会影响性能。您是否真的需要NULL的{​​{1}}选项?有什么索引?