2013-07-09 35 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獲得很多收益。