C# .NET LINQ查询准备问题

C# .NET LINQ查询准备问题,c#,mysql,performance,entity-framework,linq,C#,Mysql,Performance,Entity Framework,Linq,我们在linq查询中遇到问题。在select查询中,多个表与联接关联。其中记录筛选器应用于联接节 这个查询运行良好,在过去8到9个月的时间内给出了正确的结果。 突然之间,检索具有相同连接的记录花费了大约2分钟的时间,占用了99%的CPU 这个查询总是在用户登录时使用,所以它可以确保它在过去一直运行良好,直到问题出现。 有人能解释为什么这个问题突然发生吗 var entityList = (from x in db.TableA join y in db.TableB on x.Id eq

我们在linq查询中遇到问题。在select查询中,多个表与联接关联。其中记录筛选器应用于联接节

这个查询运行良好,在过去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();

如果该框架将
d==null
转换为
d=null
,而不是
d为null
,这是一个严重的缺陷


会影响性能。您真的需要
d
NULL
选项吗?有哪些索引?

数据库的大小可能已增长或变得支离破碎。请看:可能有很多问题,索引问题,磁盘损坏,网络速度等等。恐怕你需要自己深入研究。从提取正在执行的查询开始,看看它是什么样子。对数据库手动运行它,速度慢吗?检查执行计划等。请提供
SHOW CREATE TABLE
、生成的
SELECT
EXPLAIN SELECT…
以及表的大致大小。@jdweng-碎片整理不会造成超过百分之几的性能损失。