您应该在 NHibernate 和 Sql Server 2008 中使用外连接获取吗?
在外连接获取时,Nhibernate 文档 说:
如果您的数据库支持 ANSI 或 Oracle 样式外连接、外连接 获取可能会提高性能 限制往返次数 并从数据库中获取(代价是 可能会执行更多的工作 数据库本身)。外连接获取 允许通过以下方式连接对象的图形 多对一、一对多或一对一 要检索的关联 单个 SQL SELECT。
我正在尝试决定是否应该在当前项目(使用 NHibernate)中使用外连接获取。为此,我将测试使用和不使用外部连接获取的加载时间。但我想知道在使用Sql Server 2008时,总体上这是一个好还是坏的策略。
使用外连接获取通常比不使用 Sql Server 2008 更好吗?
如何判断是否使用它? (除了通过性能测试和查询分析)
谢谢
On outer join fetching, the Nhibernate documentation says:
If your database supports ANSI or
Oracle style outer joins, outer join
fetching might increase performance by
limiting the number of round trips to
and from the database (at the cost of
possibly more work performed by the
database itself). Outer join fetching
allows a graph of objects connected by
many-to-one, one-to-many or one-to-one
associations to be retrieved in a
single SQL SELECT.
I'm trying to decide if I should use outer join fetching in my current project (which uses NHibernate). To that end I'm going to be testing load times with and without outer join fetching. But I would like to know if it's a good or bad strategy on the whole when using Sql Server 2008.
Is it generally better to use outer join fetching than not with Sql Server 2008?
How does one determine whether to use it or not? (other than through performance testing and query profiling)
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
奇怪的问题。
必要时使用外连接获取;某些查询将需要对某些实体进行外连接获取。其他查询不会。因此,如果您不需要它,请不要使用外连接急切地获取。
使用 ICriteria API 时,您可以指定每个关联的获取类型。
这都是优化的问题,可以在之后完成。我的意思是:假设您有一个对象图,其中某些部分是通过延迟加载检索的,并且在测试后,如果延迟加载似乎对该特定对象图以负面方式影响性能,请检查您是否可以通过使用 eager 获得一些东西加载(通过外连接获取 fi)。
Weird question.
Use outer join fetching if necessary; certain queries will require outer join fetching on some entities. Other queries won't. So, if you do not need it, don't fetch eagerly using outer joins.
You can specify the type of fetching for each association when you use the ICriteria API.
It's all a matter of optimization, which can be done afterwards. I mean: suppose you have an object graph, where certain parts are retrieved via lazy loading, and after testing, if it seems that lazy loading affects performance in a negative way for that specific object graph, check if you could gain something by using eager loading (via outer join fetching f.i.).