c# - Entity Framework : multiple queries vs inner joins

标签 c# entity-framework

我目前正在使用 Entity Framework ,并且有一个有关内部联接的性能问题。

根据一般性能,以下 2 种情况中哪一种是最好的?

为了简单起见,我们假设 sibling 之间存在一对一的关系。

(1) 内部联接:

EFContext context = new EFContext();

int myId = GetMyOwnId();

Person me = context.People
                   .Include(p => p.Father)
                   .Include(p => p.Mother)
                   .Include(p => p.Brother)
                   .Include(p => p.Sister)
                   .Where(p => p.ID == myId);

return me;

(2)可选的多个查询:

EFContext context = new EFContext();

int myId = GetMyOwnId();

Person me = context.People
                   .Where(p => p.ID == myId);

if (me.FatherId.HasValue) 
    me.Father = context.People.Find(me.FatherId);

if (me.MotherId.HasValue) 
    me.Mother = context.People.Find(me.MotherId);

if (me.BrotherId.HasValue) 
    me.Brother = context.People.Find(me.BrotherId);

if (me.SisterId.HasValue) 
    me.Sister = context.People.Find(me.SisterId);

return me;

那么哪种情况最适合每种情况?

或者对于没有家庭的人,或者有父亲、母亲、 sibling 的人来说,一个比另一个更好?

最佳答案

选项 (1) 应该总是更好,因为 JOIN 是在数据库级别执行的。根据经验,您可以说 native 数据库检查比代码检查更快,并且数据库和代码之间的多次往返总是比单次往返慢。由于数据库将隐式检查连接上的空 ID,因此无需在代码中执行此操作并为此添加可能的额外往返。此外,如果数据库知道查询的意图是什么,它就能够自动优化执行计划,这可以提供另一种性能提升 - 特别是在正确设置约束和/或频繁执行查询的情况下。

也许有人可以添加一个基准,以确保 100% 确定,但从纯粹的逻辑角度来看,如果没有发生任何奇怪的情况,这应该是正确的。

关于c# - Entity Framework : multiple queries vs inner joins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56428365/

相关文章:

c# - 限制调度程序中的通知数量

c# - 将 `Page` 替换为 `WinRTXamlToolkit.Controls.AlternativePage`

c# - 如何在 Entity Framework 6 中高效设置默认实体值,数据库优先

sql-server - SQL 服务器 : find out if a db table has changed (using entity framework)

entity-framework - 使用 edmx 设计器将 Entity Framework 中的列合并为一列

c# - 在 BundleConfig.cs 中找不到 BundleCollection

c# - GridView 或 ListView 中的不同对象类型

c# - 如何复制剪贴板中按钮的文本?

MySQL 连接错误,无法检索数据库列表

c# - MVC 在不使用主键的数据库中查找行