如何为 Nhibernate 生成的选择语句"SET NOCOUNT ON"



我们有"SET NOCOUNT OFF";默认情况下在我们的数据库服务器上。我们使用";设置NOCOUNT ON";用于存储过程。正如dba所报告的,所有nhibernate生成的select语句都使用";设置NOCOUNT OFF";。执行查询需要很长时间。我们正在努力提高性能。我想不出如何设置";设置NOCOUNT ON";用于特定的nhibernate会话或查询。有人对此有意见吗。

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

SET NOCOUNT并没有产生如此显著的影响,以至于它成为一个令人担忧的问题。对于DONT返回数据的语句,将其设置为ON只是一种优化。

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

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

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

我不能在nhibernate中给你set nocount off的选项,但我知道nhibernat取决于计数来检查查询是否成功。当你返回错误的计数(0)时,nhibernate会认为有什么不对劲,并抛出一个exception。

此外,我认为设置nocount off不会给您带来太多好处。

最新更新