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