2013-07-09 34 views
0

我们的数据库服务器默认设置为“SET NOCOUNT OFF”。我们使用“SET NOCOUNT ON”作为存储过程。 据dba报告,所有nhibernate生成的select语句都使用“SET NOCOUNT OFF”。查询执行需要很长时间。 我们正在努力提高性能。我无法弄清楚为特定的nhibernate会话或查询设置“SET NOCOUNT ON”的方法。有人可以对此有一些看法。如何为Nhibernate生成的选择语句“SET NOCOUNT ON”

问候

回答

1

您可能误解了SET NOCOUNT ON的功能以及原因。

SET NOCOUNT没有如此重大的影响,它成为一个问题。将其设置为ON时,不会返回数据只是一个优化。

另一方面,在查询中将其设置为ON时,您非常想知道返回了多少结果,这没有意义。客户端不必快速检测有多少结果,而是必须枚举所有数据以查看返回的行数。

你的服务器将在任何情况下返回数据,所以告诉它不返回它返回的行数是没有意义的。

您可能有其他性能问题。你应该检查执行了哪些查询,你的表是否有适当的索引,以及你是否强迫NHibernate执行比你期望的更多的查询(可怕的N + 1问题)

1

我不能给你的NHibernate到set nocount off的选项,但我知道NHibernate的是取决于计数检查查询是succesfull。当您返回错误的计数(0)时,nhibernate会认为出现错误并抛出错误。

除此之外,我不认为你会从设置nocount off获得很多收益。