2017-07-20 20 views
0

データベースへのクエリに問題があります。 私は、以下のコードを試してみると、75ミリ秒で動作し、空のリストを返します。全て大丈夫。IQueryableのタイムアウトが期限切れです

var test1 = unit 
    .PersonQualities.GetAll() 
    .Where(qp => qp.QualityId == qualityId && qp.PersonId == targetPersonId) 
    .ToList(); 

しかし、私はこれを使用する場合、それは30秒とリターンのタイムアウト期限切れの例外を動作します:

var test2 = unit 
    .PersonQualities.GetAll() 
    .FirstOrDefault(qp => qp.QualityId == qualityId && qp.PersonId == targetPersonId); 

マイGETALL方法:

public virtual IQueryable<T> GetAll() 
{ 
    return Entities.AsQueryable(); 
} 

この問題が発生した理由を説明してください。そして、私はこの問題を解決するために何ができますか?ありがとう。 P.P.私はSQL Server 2016 Developerを使用しています。どちらのクエリもSSMSで動作します。プロファイラで

FirstOrDefaultクエリ:

exec sp_executesql N'SELECT TOP (1) 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Value] AS [Value], 
    [Extent1].[Percent] AS [Percent], 
    [Extent1].[IsLocked] AS [IsLocked], 
    [Extent1].[PersonId] AS [PersonId], 
    [Extent1].[QualityId] AS [QualityId] 
    FROM [dbo].[PersonQuality] AS [Extent1] 
    WHERE ([Extent1].[QualityId] = @p__linq__0) AND ([Extent1].[PersonId] = @p__linq__1)',N'@p__linq__0 bigint,@p__linq__1 bigint',@p__linq__0=110207,@p__linq__1=43257113 

SingleOrDefault:

exec sp_executesql N'SELECT TOP (2) 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Value] AS [Value], 
    [Extent1].[Percent] AS [Percent], 
    [Extent1].[IsLocked] AS [IsLocked], 
    [Extent1].[PersonId] AS [PersonId], 
    [Extent1].[QualityId] AS [QualityId] 
    FROM [dbo].[PersonQuality] AS [Extent1] 
    WHERE ([Extent1].[QualityId] = @p__linq__0) AND ([Extent1].[PersonId] = @p__linq__1)',N'@p__linq__0 bigint,@p__linq__1 bigint',@p__linq__0=110207,@p__linq__1=43257113 
+0

データベースサーバーで直接クエリを実行しようとしましたか? – Jehof

+0

@Jehofいいえ、現時点ではできません( – OldUnion

+0

SingleOrDefaultはうまく動作します:\ – OldUnion

答えて

0

多分あなたはあなたの統計情報を更新して、クエリキャッシュをフラッシュする必要があります。

DBCC FLUSHPROCINDB 

UPDATE STATISTICS 

に役立つことがあります。

関連する問題