Sql server 优化选择查询EF核心+Azure SQL Server

Sql server 优化选择查询EF核心+Azure SQL Server,sql-server,asp.net-core,azure-sql-database,asp.net-core-webapi,azure-app-service-plans,Sql Server,Asp.net Core,Azure Sql Database,Asp.net Core Webapi,Azure App Service Plans,我正在使用托管在Azure应用程序服务和Azure SQL Server中的.Net Core 3.1构建API Azure应用程序服务规范->基本第1.7层GB Ram Azure Sql数据库规格->基本层、5 DTU和2G最大存储 注意:应用程序服务和数据库位于同一区域 我的问题是,在运行查询以从数据库获取数据时,我遇到了低性能问题,如以下代码所示: dynamic employees = await _context.Employees .Where(e => e.Comp

我正在使用托管在Azure应用程序服务和Azure SQL Server中的.Net Core 3.1构建API

Azure应用程序服务规范->基本第1.7层GB Ram

Azure Sql数据库规格->基本层、5 DTU和2G最大存储

注意:应用程序服务和数据库位于同一区域

我的问题是,在运行查询以从数据库获取数据时,我遇到了低性能问题,如以下代码所示:

dynamic employees = await _context.Employees
    .Where(e => e.CompanyForeignKey == Guid.Parse("d0f022df-498c-4948-9567-ddc16ed49fa0"))
    .Select(emp => new
    {
        //emp.Id,
        FullName_FL = emp.FirstName_FL + " " + emp.SecondName_FL + " " + emp.LastName_FL + " " + emp.FamilyName_FL,
        FullName_SL = emp.FirstName_SL + " " + emp.SecondName_SL + " " + emp.LastName_SL + " " + emp.FamilyName_SL,
        OldValues = emp.OldValues.Select(ov => new
        {
            ov.Value,
            ov.CalculatedValue,
            ov.Category.Name_FL,
            ov.Category.Name_SL,
            .Category.Type // just string
        }).ToList()
    })
    .AsNoTracking()
    .ToListAsync();
我总是会犯以下错误

执行超时已过期。操作完成前的超时时间或服务器没有响应

我的案例是我有500名员工,每个员工有50个OldValue,每个OldValue有一个类别 因为每个模型都有很多字段,所以我使用Select来选择只需要的字段,但是当我调试时,我发现生成的SQL查询包含Category中的所有字段,而不仅仅是Name\u FL、Name\u SL和Type

那么,上述问题是否导致性能低下,我需要选择我的查询!那我该怎么解决呢

还是我的服务器规格是原因


提前谢谢

服务器规格不是问题所在

你把清单具体化了两次,据我所知,这是不必要的。 当且仅当您确实需要一个列表时,在最后一刻这样做-这会导致不必要的开销

创建一个类来保存检索到的数据,避免使用dynamic,除非您发现自己处于一种事先确实不知道数据将是什么样子的情况下——在本例中,您确实知道

提前解析Guid


配置您的查询

即使对于开发/测试,基本的第5层DTU也太低。考虑把它变成10到30 DTU,然后重试。< /P>