您是不是应该在 NHibernate 和 Sql Server 2008 中使用外连接获取?

Posted

技术标签:

【中文标题】您是不是应该在 NHibernate 和 Sql Server 2008 中使用外连接获取?【英文标题】:Should you use outer join fetching with NHibernate and Sql Server 2008?您是否应该在 NHibernate 和 Sql Server 2008 中使用外连接获取? 【发布时间】:2011-01-19 04:41:45 【问题描述】:

关于外部连接获取,Nhibernate documentation 说:

如果您的数据库支持 ANSI 或 Oracle 风格的外连接,外连接 获取可能会提高性能 将往返次数限制为 并从数据库中(以 可能更多的工作由 数据库本身)。外连接获取 允许通过以下方式连接的对象图 多对一、一对多或一对一 要在 a 中检索的关联 单个 SQL SELECT。

我正在尝试决定是否应该在我当前的项目(使用 NHibernate)中使用外连接获取。为此,我将测试使用和不使用 外部连接获取 的加载时间。但是我想知道在使用 Sql Server 2008 时总体上这是一个好还是坏的策略。

使用外连接获取通常比使用 Sql Server 2008 更好吗?

如何确定是否使用它? (通过性能测试和查询分析除外)

谢谢

【问题讨论】:

这是一个合理的问题,而且很详细,为什么它被否决了? 我不知道谁投了反对票,为什么。这对我来说也是一个问题:请为我投票! 【参考方案1】:

奇怪的问题。 必要时使用外连接获取;某些查询将需要在某些实体上进行外部联接获取。其他查询不会。因此,如果您不需要它,请不要急切地使用外连接获取。 您可以在使用 ICriteria API 时为每个关联指定获取类型。

这都是优化的问题,可以在以后完成。我的意思是:假设您有一个对象图,其中某些部分是通过延迟加载检索的,并且在测试之后,如果延迟加载似乎对该特定​​对象图的性能产生负面影响,请检查您是否可以通过使用渴望获得一些东西加载(通过外部连接获取 fi)。

【讨论】:

以上是关于您是不是应该在 NHibernate 和 Sql Server 2008 中使用外连接获取?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 和 SQL Server 中,我应该使用哪些类型来表示百分比?

NHibernate 的 format_sql 属性(不是那个)漂亮的打印

您是不是会将 NHibernate 用于具有部分无法控制的遗留数据库的项目?

NHibernate HQL Generator支持SQL Server 2016时态表

nHibernate 生成了这个奇怪的 SQL; SQLS 是不是按原样使用它?

如何使用 DISTINCT 在 NHibernate SQL 查询中进行分页