栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

实体框架索引所有外键列

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实体框架索引所有外键列

在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表关系中通常是有利的,在该关系中,通常可以同时检索父级的所有子行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456342.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号