优化 select 查询 EF Core + Azure SQL 服务器

Optimize select query EF Core + Azure SQL Server

我正在使用托管在 Azure 应用服务和 Azure SQL 服务器中的 .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();

而且我总是收到以下错误

Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding

我的情况是我有 500 名员工,每个员工有 50 个旧值,每个旧值都有类别 因为每个模型都有很多字段,我使用 Select 来选择只需要的字段,但是当我调试时我发现生成的 SQL 查询包含类别中的所有字段而不仅仅是 (Name_FL、Name_SL 和类型)

所以,是不是上面的问题导致了性能低下,我可能需要优化我的查询!那我是怎么解决的!

或者我的服务器规格是原因?

提前致谢。

服务器规格不是问题。

您正在具体化列出两次,据我所知,这是没有必要的。 当且仅当您确实需要一个列表时才在最后执行此操作 - 这会导致不必要的开销。

创建一个 class 来保存您检索到的数据,避开 dynamic 除非您发现自己处于一种您确实事先不知道数据会是什么样子的情况- 在这种情况下你可以。

提前解析Guid

分析您的查询!

基本 Tier 5 DTU 即使对于 DEV/Test 来说也太低了。考虑将其设为 10 - 30 DTU,然后重试。