2011-02-01 103 views
0

我在Entity Framework中遇到了非常差的性能。SQL性能優化(實體框架)

我將它綁定到視圖,並且使用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 

如何EF查詢進行優化,考慮到存在有限的控制權SQL如何呈現?

+1

在('a','b')`接口中的AND ID缺失EF版本。這可能會有很大的不同。 – 2011-02-01 17:11:27

+0

@Mikael - 這應該是一個答案。 – cjk 2011-02-01 17:14:20

+0

@ck - 當然,完成。 – 2011-02-01 17:24:32

回答

1

AND ID in ('a','b')從EF版本中缺少接縫。這可能會有很大的不同。

-1

您是否在所有視圖中放入了(解鎖)?大聲笑