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