Widzę naprawdę dziwne perf związane z bardzo prostym zapytaniem używającym Entity Framework Code-First z .NET Framework w wersji 4. Zapytanie LINQ2Entities wygląda następująco:
context.MyTables.Where(m => m.SomeStringProp == stringVar);
Wykonanie tego zajmuje ponad 3000 milisekund. Wygenerowany SQL wygląda bardzo prosto:
SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp],
...
FROM [MyTable] as [Extent1]
WHERE [Extent1].[SomeStringProp] = '1234567890'
To zapytanie jest uruchamiane niemal natychmiast po uruchomieniu za pośrednictwem Management Studio. Kiedy zmieniam kod C #, aby użyć funkcji SqlQuery, działa w 5-10 milisekund:
context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
Tak więc, dokładnie ten sam kod SQL, wynikowe encje są śledzone w obu przypadkach, ale różnica między nimi jest szalona. Co daje?
Performance Considerations for Entity Framework 5