2011-02-01 21 views
0

Entity Frameworkのパフォーマンスが実際に低下しています。SQLパフォーマンスの最適化(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が制限された制御があそこにあることを考慮EFクエリを最適化することができますどのように

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

生成:ここ

は私のテストケース(擬似)、同じデータの定期的な選択でありますSQLのレンダリング方法は?

+1

'( 'a'、 'b')'の縫い目はEF版では欠けています。それは大きな違いをもたらすかもしれません。 –

+0

@Mikael - 答えになるはずです。 – cjk

+0

@ck - もちろんです。 –

答えて

1

AND ID in ('a','b') EFバージョンから欠けている継ぎ目。それは大きな違いをもたらすかもしれません。

+0

最後に+1に戻りました... – cjk

-1

WITH(NOLOCK)をすべてのビューに入れましたか? lol

+0

NOLOCKは予期せぬ結果を招く可能性があります。コミットされたデータが欠落しているか、複数のコミットされたデータが返されている可能性があります。 http://blogs.msdn.com/b/sqlcat/archive/2007/02/01/previously-committed-rows-might-be-missed-if-nolock-hint-is-used.aspx –

+0

を参照してください。時間、私にとってはそれは許容される限界です。 –

関連する問題