Оптимизация производительности SQL (Entity Framework) - PullRequest
0 голосов
/ 01 февраля 2011

У меня очень низкая производительность в Entity Framework.

Я привязываю его к представлениям, и запрос к ним занимает в 3-6 раз больше времени с использованием EF.

Вот мой тестовый пример (псевдо), Обычный выбор тех же данных:

Select * FROM myView 
WHERE DateField > X 
AND DateField < Y AND ID in ('a','b') 
AND [expirationDateTime] = '9999-12-31'

Execution Time: 0:30

EF сгенерированный SQL

exec sp_executesql N'SELECT 
    [Extent1].[Field1] AS [Field1], 
    ...
    FROM  (SELECT 
              [myView].Field1 AS [Field1]
              ...
              FROM [dbo].[myView] AS [myView]) AS [Extent1]
    WHERE ([Extent1].[DateField] > @p_linq__0)
    AND   ([Extent1].DateField] < @p_linq__1)
    AND   ([Extent1].[expirationDateTime] = @p__linq__2)',
    N'@p__linq__0 datetime,@p__linq__1 datetime,@p__linq__2 datetime',
      @p__linq__0='2010-12-01 00:00:00',
      @p__linq__1='2011-01-06 00:00:00',
      @p__linq__2='9999-12-31',

Execution Time: 2:54

Как можно оптимизировать EF-запрос, учитывая ограниченный контроль над обработкой SQL?

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

AND ID in ('a','b') швы отсутствуют в версии EF.Это может иметь большое значение.

0 голосов
/ 01 марта 2011

Вы указали WITH (NOLOCK) во всех своих взглядах?лол

...