有没有办法提高我的 EF 核心查询性能?

时间:2021-02-12 13:35:04

标签: c# query-optimization ef-core-2.2

我使用的是廉价服务器,并且正在努力提高查询结果的性能速度。有机会做到吗?在工作示例中,我有一个实体模型:

public class VesselModel
{
    [Key]
    public int VesselId { get; set; }
    public int VesselImo { get; set; }
    public int VesselMmsi { get; set; }
    public string DpClass { get; set; }
    public string DpValid { get; set; }
    [ForeignKey(nameof(ManagerId))]
    public CompanyModel CompanyManager { get; set; }
    public ICollection<VesselUser> VesselsUsers { get; set; }
}

和一个视图模型:

public class ResultViewModel
{
    public int VesselImo { get; set; }
    public int VesselMmsi { get; set; }
}

我的查询如下:

var vessels = _context.Vessels.OrderBy(v => v.Name).AsNoTracking();
if (search.DpClass != null && search.DpClass.Length != 0) 
    vessels = vessels.Where(data => data.DpClass != null).Where(data => search.DpClass.Any(x => data.DpClass.Contains(x)));
if (search.DpValid != null && search.DpValid.Length != 0) 
    vessels = vessels.Where(data => data.DpValid != null).Where(data => search.DpValid.Any(x => data.DpValid.Contains(x)));
return vessels;

上述查询搜索与 DpClass 和/或 DpValid 值匹配的项目。当它完成时,IQueryable<VesselModel> 被传递给服务类,在那里它被视图模型解析:

return from vessel in vessels
    select new ResultViewModel
    {
        VesselId = vessel.VesselId,
        VesselImo = vessel.IMO.Value,
        VesselMmsi = vessel.MMSI.Value
    };

并将这个结果传递给控制器​​。我想知道,您是否看到任何提高此查询性能的方法?因为对于一个大数据库来说,得到这些结果仍然需要很多时间:(

0 个答案:

没有答案