如何为Nhibernate生成的select语句“SET NOCOUNT ON”

时间:2013-07-09 14:19:41

标签: nhibernate

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

此致

2 个答案:

答案 0 :(得分:1)

我无法在nhibernate中向set nocount off提供选项,但我知道nhibernate依赖于计数来检查查询是否成功。当你返回错误的计数(0)时,nhibernate会认为出错了并抛出了一个例外。

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

答案 1 :(得分:1)

你可能会误解SET NOCOUNT ON的作用和原因。

SET NOCOUNT没有如此显着的影响,它成为一个问题。 返回数据的语句将其设置为ON只是一种优化。

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

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

您可能还有其他性能问题。您应该检查执行的查询,表是否具有正确的索引以及是否强制NHibernate执行超出预期的查询(可怕的N + 1问题)

相关问题