.NET Framework バージョン 4 で Entity Framework Code-First を使用した非常に単純なクエリに関連する、非常に奇妙なパフォーマンスが見られます。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 で実行するとほぼ瞬時に実行されます。SqlQuery 関数を使用するように C# コードを変更すると、5 ~ 10 ミリ秒で実行されます。
context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
したがって、まったく同じ SQL、結果のエンティティはどちらの場合も変更追跡されますが、2 つの間のパフォーマンスの大きな違いです。何を与える?