我最近从针对多个实体的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文件中的关联替换的部分。关系是1到1,约束基于ID,就像连接一样。
我还要提到SQL表上没有FK关系。 (遗传的东西,我无法改变)
**新信息 我使用join -vs-associations捕获了查询生成的SQL,并从SSMS运行它。性能几乎相同。因此,看起来生成的sql不是问题,而是linq代码的工作原理。