SQL性能优化(实体框架)

时间:2011-02-01 17:00:54

标签: sql sql-server linq performance sql-server-2008

我在Entity Framework中遇到了非常糟糕的表现。

我将它绑定到视图,使用EF查询它们需要3-6倍。

这是我的测试用例(伪),定期选择相同的数据:

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

考虑到对SQL呈现方式的控制有限,如何优化EF查询?

2 个答案:

答案 0 :(得分:1)

EF版本中缺少

AND ID in ('a','b')个接缝。这可能会有很大的不同。

答案 1 :(得分:-1)

你把WITH(NOLOCK)放在你的所有观点中吗?洛尔