C# 需要帮助使用ASP.NET Core优化LINQ查询吗
我正在开发一个ASP.NET核心MVC应用程序,我需要一些帮助来优化我的LINQ查询。目前,我的应用程序运行非常缓慢,我认为这是由于我编写查询的方式造成的。我的SQL db包含大约190万行数据,每个数据项有4个属性 这是我在控制器中的一个示例C# 需要帮助使用ASP.NET Core优化LINQ查询吗,c#,linq-to-sql,asp.net-core,asp.net-core-mvc,C#,Linq To Sql,Asp.net Core,Asp.net Core Mvc,我正在开发一个ASP.NET核心MVC应用程序,我需要一些帮助来优化我的LINQ查询。目前,我的应用程序运行非常缓慢,我认为这是由于我编写查询的方式造成的。我的SQL db包含大约190万行数据,每个数据项有4个属性 这是我在控制器中的一个示例 model.MostPopular = await _givenNameRepo.GetByAlphaSinceYear(model.StartsWith, model.Gender, model.SortCount, model.SinceYear).
model.MostPopular = await _givenNameRepo.GetByAlphaSinceYear(model.StartsWith, model.Gender, model.SortCount, model.SinceYear).ToAsyncEnumerable().ToList();
这是我在回购协议中得到的
public IEnumerable<string> GetByAlphaSinceYear(string alpha, string gender, int sortCount, int sinceYear)
{
var names = (from n in _context.AsNoTracking()
where n.Name.StartsWith(alpha) && n.Gender == gender && n.Year >= sinceYear
group n by new { n.Name } into nn
select new
{
nn.Key.Name,
Frequency = nn.Sum(s => s.Frequency)
}).OrderByDescending(i => i.Frequency)
.Select(j => j.Name).Take(sortCount);
return names;
}
每年都有自己的名字,有自己的性别和频率。示例查询通过将一些年份(去年、过去5年、过去10年等)中的姓名频率和性别(姓名可能是男性和女性)进行汇总,然后根据这些汇总频率按降序排序,来查找最流行的姓名。然后从顶部选择要显示的任何数字,以显示最流行的名称。这更像是SQL server端的索引问题。你有这三列的索引吗?没有更多的信息很难帮助你。至少提供一个表架构和/或该表上的索引集。在非索引字段上搜索可能会导致除上述信息外的完整或部分表扫描-看看这个LINQ查询实际生成的sql查询。Jeff,如果您正在处理一个有数百万行的表,您最好尽快熟悉索引,我的朋友…:-)你为什么按名字分组?名字不应该是唯一的吗?
Id | Year | Name | Gender | Frequency