实体框架索引所有外键列

实体框架索引所有外键列,第1张

实体框架索引所有外键列

在EF CodeFirst中,建模外键关系的一般原因是为了实体之间的可导航性。考虑一个

Country
和的简单情况,
City
为以下LINQ语句定义了急切的加载:

var someQuery =    db.Countries     .Include(co => co.City)     .Where(co => co.Name == "Japan")     .Select(...);

这将导致以下查询:

SELECT *FROM Country coINNER JOIN City ci  ON ci.CountryId = co.IDWHERe co.Name = 'Japan';

如果没有在外键上启用索引

City.CountryId
,则SQL将需要扫描“城市”表,以便在JOIN期间为“国家/地区”过滤城市。

TL; DR

建议使用外键索引,即使您不直接在外键上进行过滤,联接中仍将需要它。似乎有一些例外:

  • 如果外键的选择性非常低,例如在上述情况下,如果国家表中所有城市的50%在日本,则该索引将无用。

  • 如果您实际上从未浏览过该关系。

另外一个优化考虑因素是是否

ClusteredIndex
在子表的“表”中使用外键(即按国家对城市进行集群)。这在parent:child表关系中通常是有利的,在该关系中,通常可以同时检索父级的所有子行。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5431861.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-11
下一篇2022-12-11

发表评论

登录后才能评论

评论列表(0条)

    保存