我听到很多关于延迟加载的性能问题,无论是在 NHibernate、Linq ......
问题是 N+1 选择。例如,我想要所有帖子及其用户,在 foreach 我懒加载用户,他们我需要为帖子选择一个,为每个用户加上 N 个选择。
延迟加载:
1 - select ....from post
N - 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/