【发布时间】:2012-04-06 06:57:38
【问题描述】:
我继承了一个 C# / ASP.NET MVC / Entity Framework 项目,但速度有些慢。数据库中的数据不多,但对.Include() 的调用导致速度变慢。
但是,我发现了一些非常奇怪的东西。我有一个只有数字(5 列)的 2k 行表。我正在搜索的列上有索引。
做的时候:
_entities.MyTable.Where(x=> x.Id1 == 4 && x.Id2 == 5).First()
在我的开发机器上需要 1800 毫秒。
但是,当我这样做时:
_entities.MyTable.Where("it.Id1 = 4 and it.Id2 = 5").First()
大约需要 10 毫秒。
有什么关系?我不明白为什么 LINQ 表达式会这么慢。
【问题讨论】:
-
尝试在 LinqPad 中解压,并将其生成的 SQL 查询与您自己的进行比较
-
MyTable 是否在任何实体中继承?
-
@daryal 抱歉,说到 EF,我还是个菜鸟,那会是什么样子?此对象/模型与其他对象相关。表中的数字是其他表的外键。
-
@AlexandruPetrescu,您在模型中是否有任何关系,例如指向 MyTable 的箭头? (这意味着 mytable 是关系另一端的基类)
-
@daryal 此类有 3 个导航属性(外键),但我在 edmx 模型中看不到“箭头”。我看到了关系,但在进行 .Where(x=>) 调用时我没有调用 .Include() ,所以它不应该查询这些表吗?
标签: c# .net linq entity-framework linq-to-entities