You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core一对多关系:查询指定子项的高效方式对比

EF Core一对多场景下的查询效率对比

场景说明

给定实体定义:

class Author { string Id, ICollection<Book> Books }
class Book { string Id, Author AuthorRef, string AuthorRefId }

已知authorId与bookId,需获取对应的Book对象,以下是两种查询方式的效率对比:

两种方式分析

  • 方式1:先查Author再筛选Books
    该方式会先执行查询获取指定作者的全部书籍,再在内存中按bookId筛选目标对象。如果作者拥有大量书籍,数据库会返回大量无关数据,不仅增加网络传输成本,还会占用更多内存进行后续筛选,效率极低。即使开启EF Core的立即加载,本质仍是拉取全量书籍,没有优化空间。

  • 方式2:直接查询Books集合
    使用条件Books.Where(b => b.Id == bookId && b.AuthorRefId == authorId)直接在数据库层面过滤。数据库可利用Book.Id(主键默认有索引)和AuthorRefId的索引(若已创建)快速定位目标记录,仅返回所需的单条数据,传输和处理成本都极低。你担心的“搜索对象数量更多”是误解——数据库查询是基于条件精准匹配,而非全表扫描,实际处理的数据量远小于方式1。

结论

方式2的效率远高于方式1,这是EF Core查询的最佳实践:尽量让数据库完成数据过滤,减少不必要的数据传输与内存处理。

内容的提问来源于stack exchange,提问作者Oyiwai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:52:08