2008-08-25 45 views

回答

18

從SQL BOL:

SET NOCOUNT ON防止 DONE_IN_PROC消息到客戶端 發送用於在存儲 過程的每個語句。對於 包含幾個語句不 回報多少實際數據的存儲過程,設置設爲 NOCOUNT爲ON時,提供 顯著的性能提升,因爲 網絡流量大大減少。

查看http://msdn.microsoft.com/en-us/library/ms189837.aspx瞭解更多詳情。
此外,這篇文章在SQLServerCentral關於這個問題很大:
Performance Effects of NOCOUNT

+0

它特別*在使用遊標的查詢中是強制性的。 – 2010-10-15 22:02:48

8

而且這不只是減少網絡流量。 SQL Server內部有一個提升,因爲執行計劃可以優化,因爲減少了一個額外的查詢來確定有多少行受到影響。

4

它只是停止顯示影響發送/顯示行數的消息,這會提供一個好處,特別是如果您有許多將返回消息的語句。它提高了性能,因爲通過網絡發送的數據較少(在sql server和前端之間)。

更多在BOL:SET NOCOUNT

1

我總是有它設置爲ON由於上述原因,但如果你有超過1周的結果在你的進程內設置可能會搞糟的客戶端代碼

0

我個人很喜歡將NOCOUNT應用於以手動方式運行的查詢,並使用大量Print語句輸出調試消息。這樣一來,你的輸出看起來不那麼像:

 
Updating usernames 
(287 rows updated) 

Done 
Updating passwords 
(287 rows updated) 

Done 
Doing the next thing 
(1127 rows updated) 

Done 

,而更像

 
Updating usernames 
Done 

Updating passwords 
Done 

Doing the next thing 
Done 

根據您要更新什麼的敏感性,有時是有幫助的包括計數;然而,對於具有大量輸出的複雜腳本,我通常喜歡將它們排除在外。

0

SET NOCOUNT ON是一個oneline語句,Sql服務器將消息發送回client.this是爲每個進程執行的(即選擇,插入,更新,刪除)。如果你避免這個消息,我們可以提高整體性能爲我們的數據庫,也減少了網絡流量

對於EX:

聲明@a表(ID INT)

SET NOCOUNT上

插入@一個選擇1個聯合選擇2

SET NOCOUNT關閉

0

停止指示受一橫貫的行數消息act-SQL語句作爲結果的一部分返回。

相關問題