3

我继承了一个 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 表达式会这么慢。

4

2 回答 2

0

打开 Sql Profiler,查看来自 EF 的查询。尝试分析它,制定计划。似乎 EF 以一种奇怪的方式实现查询,而没有获取索引。

于 2012-04-06T07:01:33.617 回答
0

是不是 EF 必须生成 SQL 才能在第一个示例中执行 where 子句,而在第二个示例中,SQL 更容易生成,因为它可以插入您已经提供的 SQL?

我发现 EF 生成查询的速度非常慢,在这种情况下似乎不太可能,因为它在这两种情况下都是一个相当简单的查询。

您是否尝试过编译第一个查询并多次运行它以检查执行时间是否仅包括实际运行 SQL 而不仅仅是生成它?

于 2012-04-07T05:16:39.973 回答