我遇到问题,下面的查询需要大约700毫秒来执行。它处于一个循环中并被调用100次以上,因此它将永远消失。
型号:
public class ReleaseDates
{
public int Id { get; set; }
public string MovieName { get; set; }
public string Country { get; set; }
public DateTime ReleaseDate { get; set; }
public string AlternateSource { get; set; }
}
查询:
public async Task<List<ReleaseDates>> GetReleaseDatesAsync(string movieName)
{
return await Db.ReleaseDates.Where(x => x.MovieName == movieName && string.IsNullOrEmpty(x.AlternateSource)).ToListAsync();
}
有关如何提高速度的建议吗?
答案 0 :(得分:3)
摆脱循环。这就是问题所在。您正在向数据库发送大量查询。
将您要搜索的所有电影名称存储在一个列表中并在那里包含。
public async Task<List<ReleaseDates>> GetReleaseDatesAsync(List<string> movieNames)
{
//movie names that you're searching for - movieNames
return await Db.ReleaseDates.Where(x => movieNames.Contains(x.MovieName) && string.IsNullOrEmpty(x.AlternateSource)).ToListAsync();
}
如果您想获得&#34; Ant Moon&#34;,&#34; GodZippa&#34;,&#34; SuperWan&#34;的发布日期,您的列表将包含这些字符串,这就是它
答案 1 :(得分:2)
在电影名称字段中创建索引。此外,通过分析器捕获查询并在启用了“显示计划”的Sql Management Studio中执行该查询。它将为您提供一些优化查询性能的见解。