我最近从针对多个实体的 linq 查询中删除了 3 个连接,并改为使用表之间的关联。
似乎查询现在需要更长的时间来执行。我进行了更改,希望能提高性能。
这与其他人观察到的一致吗?这有什么合乎逻辑的原因吗?关于使用哪种策略有一个好的经验法则吗?
带连接的 Linq 查询:
from n in db.Names
.Where(n.ID = "myID")
**join d in db.InstitutionDemographics on n.ID equals d.ID
join m in db.MemberAdhocIds on n.ID equals m.ID
join ba in db.NameAddresses on n.BillingAddressNumber equals ba.AddressNumber
join sa in db.NameAddresses on n.ShippingAddressNumber equals sa.AddressNumber
join ma in db.NameAddresses on n.MailingAddressNumber equals ma.AddressNumber
join mas in db.MemberAdhocServices on n.ID equals mas.InstitutionID**
join pn in db.PrimaryContactNames on n.ID equals pn.ID into PrimeName
from pn in PrimeName.DefaultIfEmpty()
join cd in currentDuesResults on n.ID equals cd.ID into DuesJoin
from cd in DuesJoin.DefaultIfEmpty()
join bd in billingDateResults on n.ID equals bd.ID
into BillingDate
from bd in BillingDate.DefaultIfEmpty()
带有 ** 标记的部分是在 EDMX 文件中被关联替换的部分。关系是一对一的,约束基于 ID,就像连接一样。
我还必须提到 SQL 表上没有 FK 关系。(我无法更改的遗留内容)
** 新信息 我已经使用 join -vs- associations 捕获了查询生成的 SQL,并从 SSMS 运行它。性能几乎相同。因此,生成的 sql 似乎不是问题,而是 linq 代码如何工作的其他问题。