最佳答案
我看到一些非常奇怪的性能与一个非常简单的查询使用实体框架代码优先与。NET 框架版本4。LINQ2Entity 查询如下所示:
context.MyTables.Where(m => m.SomeStringProp == stringVar);
这将花费超过3000毫秒的时间来执行。生成的 SQL 看起来非常简单:
SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp],
...
FROM [MyTable] as [Extent1]
WHERE [Extent1].[SomeStringProp] = '1234567890'
此查询在通过 ManagementStudio 运行时几乎立即运行。当我更改 C # 代码以使用 SqlQuery 函数时,它的运行时间为5-10毫秒:
context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
因此,完全相同的 SQL,结果实体在两种情况下都是变更跟踪的,但是两者之间的性能差异很大。怎么了?