我继承了一个C# / ASP.NET MVC / Entity Framework项目,但速度有点慢。数据库中的数据不是很多,但是对.Include()的调用导致了速度减慢。
然而,我发现了一些非常奇怪的事情。我有一个只有数字(5列)的2k行表。我对要搜索的列有索引。
执行以下操作时:
_entities.MyTable.Where(x=> x.Id1 == 4 && x.Id2 == 5).First()在我的开发机器上需要1800ms。
然而,当我这样做的时候:
_entities.MyTable.Where("it.Id1 = 4 and it.Id2 = 5").First()大概需要10毫秒。
怎么回事?我不明白为什么LINQ表达式会这么慢。
发布于 2012-04-06 15:01:34
打开Sql Profiler,查看来自EF的查询。试着分析它,制定计划。EF似乎以一种奇怪的方式实现查询,而不获取索引。
发布于 2012-04-07 13:16:40
是不是EF必须生成SQL来执行第一个示例中的where子句,而在第二个示例中,生成SQL要容易得多,因为它只需插入已经提供的SQL即可。
我发现EF在生成查询方面非常慢,在这种情况下似乎不太可能,因为在这两种情况下它都是一个相当简单的查询。
您是否尝试过编译第一个查询并多次运行它,以检查执行时间是否只包括实际运行SQL,而不只是生成它?
https://stackoverflow.com/questions/10040211
复制相似问题