gpt4 book ai didi

Asp.net Core Linq 查询花费太多时间

转载 作者:行者123 更新时间:2023-12-03 08:23:07 25 4
gpt4 key购买 nike

我有一个 linq 查询,需要 31 秒。这是我第一次收到这么晚的询问,我不知道该怎么办。让我向您展示我的查询:

        public IEnumerable<WebFairField> WebFairFieldForFair(Guid ID)
{
return TradeTurkDBContext.WebFairField.Where(x => x.DataGuidID==ID)
.Include(x => x.Category)
//
.Include(x=>x.FairSponsors)
.ThenInclude(x=>x.Company)
.ThenInclude(x=>x.FileRepos)
//
.Include(x=>x.WebFairHalls)
.ThenInclude(x=>x.HallSeatingOrders)
.ThenInclude(x=>x.Company)
.ThenInclude(x=>x.FileRepos)
//
.Include(x=>x.HallExpertComments)
.Include(x=>x.Products)
.Include(x=>x.FairSponsors)
.AsNoTracking().ToList();
}

我确信这是一个正确的查询,但我不知道为什么该查询花费了太多时间。

感谢您的帮助!!

最佳答案

这称为笛卡尔爆炸。 EF Core 生成 SQL,该 SQL 返回大量记录,这些记录将在客户端聚合。

示意图:FairSponsors * FairSponsor.Company.FileRepos * WebFairHalls * WebFairHall.HallSeatingOrders * WebFairHall.HallSeatingOrder.Company.FileRepos * HallExpertComments * 产品 * FairSponsors。记录太多了,不是吗?

EF Core 有运算符 AsSplitQuery()。尝试应用于您的查询,可能会加快返回结果的速度,但不会太多。 Include 中请求的每个集合都会产生额外的查询。

还可以尝试删除 AsNoTracking() 或添加 AsNoTrackingWithIdentityResolution() - 在这种情况下,跟踪可能会提高查询速度。

关于Asp.net Core Linq 查询花费太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67243696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com