2017-09-14 10 views
-1

は、私はC#Entity Frameworkのを使用してIncludeはCountのパフォーマンスに影響しますか?

public static int GetStudentCount() 
{ 
    using(SchoolContext ctx = new SchoolContext()) 
    { 
     return ctx.Student.Include("Subjects").Include("Subjects.SubjectsDescription").Include("Teacher").Count(); 
    } 
} 

質問私の学生をカウントするために、次の方法があります: は、パフォーマンスの違いは、この方法ではありますが?

public static int GetStudentCount() 
{ 
    using(SchoolContext ctx = new SchoolContext()) 
    { 
     return ctx.Student.Count(); 
    } 
} 

アップデート:全くInclude()を追加し、なぜ一部のユーザーが興味を持っているので - 私はサーバルフィルタを使用してメソッドを再利用したいです。だから私は、私は以下のコードとログを実行違いをテストするために、すべての学生GetStudentとデータをフィルタリングするために同じコードを使用する一つの方法を取得し、ちょうど(データベースページングのための)数を返すためのひとつの方法

public static int GetStudentCount(Filter f) 
{ 
    using(SchoolContext ctx = new SchoolContext()) 
    { 
     return GetStudents(ctx.Student.AsQueryable(),f).Count(); // has filters an Include() 
    } 
} 
+1

テストしてご覧ください。 –

+0

@GiladGreen SQLにキャッシュがあり、差異に気づくデータがないため、テストするのが難しいです。 – Toshi

+1

@Toshi - 影響力は「はい」です - 結合を作成すると結合が追加されます。しかし、正しいことはテストだけです。そのために、データを取り込み、大量の時間のクエリを実行し、平均化を行います(または可能であればキャッシングなしでDBプロパティを使用して再生する)。 –

答えて

2

を持っています私のoracleデータベースに対するクエリを生成します。

var context = new DbContext(); 
context.Database.Log = Log; 
var count = context.TBCO_CATEGORY.Count(); 

生成するクエリが

SELECT 
"GroupBy1"."A1" AS "C1" 
FROM (SELECT 
    COUNT(1) AS "A1" 
    FROM "SIMS"."TBCO_CATEGORY" "Extent1" 
) "GroupBy1" 

、私は次のコード

var context = new SIMSContext(); 
context.Database.Log = Log; 
var count = context.TBCO_CATEGORY.Include(x=>x.TBCO_ITEM).Count(); 

SQLを生成を実行した:

ので、同じ同じSQL文を意味
SELECT 
"GroupBy1"."A1" AS "C1" 
FROM (SELECT 
    COUNT(1) AS "A1" 
    FROM "SIMS"."TBCO_CATEGORY" "Extent1" 
) "GroupBy1" 

実行計画。

関連する問題