sql - 延迟加载真的很糟糕吗?

标签 sql linq nhibernate entity-framework lazy-loading

我听到很多关于延迟加载的性能问题,无论是在 NHibernate、Linq ......

问题是 N+1 选择。例如,我想要所有帖子及其用户,在 foreach 我懒加载用户,他们我需要为帖子选择一个,为每个用户加上 N 个选择。

延迟加载:

1 - select ....from postN - select ....from user
“好”的方法是做一个连接:

1 - select .....from post inner join user on post.UserId = user.Id
但是看到EF生成的SQL,才发现浪费了很多数据。想象一下,所有帖子都是同一个用户。内部联接将为每个帖子行带来所有用户列。

在性能方面,哪种方法最好?

最佳答案

延迟加载既不好也不坏。有关更详细的解释,请参阅此内容:

When should one avoid using NHibernate's lazy-loading feature?

一般来说,延迟加载是 ORM 的一个很好的默认行为,但作为 ORM 用户,您需要意识到何时覆盖默认值并急切加载数据。分析应用程序的性能是决定是否使用延迟加载的最佳方式。小心不要在过早的优化上花费太多精力。

关于sql - 延迟加载真的很糟糕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155363/

相关文章:

Python MySql Select 语句。来自Python 条目的Where 列

C# LINQ - 根据另一个列表中的子属性返回类型化过滤列表

c# - 将 SQL 语句转换为 Linq

nhibernate - Visual Studio .Net 中显示的 dll 版本不反射(reflect)引用的 dll 文件/产品版本

访问时的 NHibernate LazyLoad 单个属性

NHibernate 一对多问题

c# - Groupby,在 Linq lambda 中与多个连接求和

sql - 用于 PL/SQL Oracle 函数或过程创建的 IS 与 AS 关键字

MySQL - 条件外键约束

c# - 过滤 IEnumerable<string> 不需要的字符串