C# 包含是否会影响计数的性能?

C# 包含是否会影响计数的性能?,c#,entity-framework,C#,Entity Framework,我使用C#Entity框架,并使用以下方法计算学生人数 public static int GetStudentCount() { using(SchoolContext ctx = new SchoolContext()) { return ctx.Student.Include("Subjects").Include("Subjects.SubjectsDescription").Include("Teacher").Count(); } } 问题

我使用C#Entity框架,并使用以下方法计算学生人数

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
,还有一个方法使用相同的代码过滤数据,只返回一个计数(用于数据库分页)


为了测试差异,我执行下面的代码,并根据我的oracle数据库记录generate查询

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的步骤是:

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

这意味着相同的SQL语句也有相同的执行计划。

测试一下,看看。@GiladGreen很难测试,因为SQL有缓存,我没有足够的数据来注意错误difference@Toshi-it是否影响的答案是“是”-添加包含将创建连接。但正确的做法是测试——并且为此——填充数据,执行查询大量时间,并进行平均(如果可以的话,也可以使用DB属性进行无缓存)@Toshi至少应该首先确定所创建的SQL中是否存在任何差异。如果Include确实创建了一个包含大量左连接的查询,那么没有左连接肯定会更有效。尽管在ef core中,行为更为灵活。我应该在这个问答中补充这一点。
SELECT 
"GroupBy1"."A1" AS "C1"
FROM ( SELECT 
    COUNT(1) AS "A1"
    FROM "SIMS"."TBCO_CATEGORY" "Extent1"
)  "GroupBy1"