我继承了C#/ ASP.NET MVC / Entity Framework项目,但速度有些慢。数据库中的数据不是很多,但是对.Include()
的调用导致速度减慢。
然而,我发现了一些非常奇怪的东西。我有一个2k行表,只有数字(5列)。我在搜索的列上有索引。
做的时候:
_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表达式会这么慢。
答案 0 :(得分:0)
打开Sql Profiler,查看EF的查询。尝试分析它,构建计划。似乎EF以奇怪的方式实现查询,而不需要获取索引。
答案 1 :(得分:0)
可能是EF必须生成SQL以在第一个示例中执行where子句,而在第二个示例中,SQL更容易生成,因为它只能插入已提供的SQL吗?
我发现EF在生成查询时非常慢,在这种情况下似乎不太可能,因为在这两种情况下它都是一个相当简单的查询。
您是否尝试过编译第一个查询并多次运行它以检查执行时间是否只包括实际运行SQL而不只是生成它?