在SQL Server查询中关闭NOCOUNT有哪些优点和缺点?

===============>>#1 票数:18 已采纳

从SQL BOL:

SET NOCOUNT ON可防止为存储过程中的每个语句向客户端发送DONE_IN_PROC消息。 对于包含多个不返回大量实际数据的语句的存储过程, 将SET NOCOUNT设置为ON可以显着提高性能 ,因为网络流量大大减少。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms189837.aspx
此外,关于SQLServerCentral的这篇文章在这个主题上很棒:
NOCOUNT的性能影响

===============>>#2 票数:8

并且不仅仅是网络流量减少了。 SQL Server内部有一个提升,因为可以优化执行计划,因为减少了额外的查询以确定受影响的行数。

===============>>#3 票数:4

它只是停止显示为发送/显示而影响的行数的消息,这提供了性能优势,特别是如果您有许多将返回消息的语句。 它提高了性能,因为通过网络(在sql server和前端之间)发送的数据较少。

更多BOL: SET NOCOUNT

===============>>#4 票数:1

由于上述原因,我总是把它设置为ON,但如果你的proc中有超过1个结果集,它可能会弄乱客户端代码

===============>>#5 票数:0

SET NOCOUNT ON是一个oneline语句,Sql服务器将消息发送回客户端。这是针对每个进程执行的(即选择,插入,更新,删除)。如果您避免此消息,我们可以提高数据库的整体性能。减少网络流量

对于EX:

声明@a table(id int)

设置nocount

insert @a select 1 union select 2

设置nocount

===============>>#6 票数:0

停止指示受Transact-SQL语句影响的行数的消息作为结果的一部分返回。

===============>>#7 票数: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

根据您更新的敏感度,有时包括计数是有帮助的; 但是,对于具有大量输出的复杂脚本,我通常希望将它们排除在外。

  ask by Krishna Kumar translate from so

未解决问题?本站智能推荐: