在SQL Server查询中关闭 NOCOUNT
的优点和缺点是什么?
答案 0 :(得分:18)
来自SQL BOL:
SET NOCOUNT ON会阻止发送 DONE_IN_PROC消息给客户端 对于存储的每个语句 程序。对于存储过程 包含几个没有的语句 返回很多实际数据,设置SET NOCOUNT到ON可以提供 显着的性能提升,因为 网络流量大大减少。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms189837.aspx
此外,关于SQLServerCentral的这篇文章在这个主题上很有用:
Performance Effects of NOCOUNT
答案 1 :(得分:8)
并且不仅仅是网络流量减少了。 SQL Server内部有一个提升因为可以优化执行计划,因为减少了额外的查询以确定受影响的行数。
答案 2 :(得分:4)
它只是停止显示为发送/显示而影响的行数的消息,这提供了性能的好处,特别是如果您有许多将返回消息的语句。它提高了性能,因为通过网络(在sql server和前端之间)发送的数据较少。
更多信息,请访问:SET NOCOUNT
答案 3 :(得分:1)
由于上述原因,我总是把它设置为ON,但是如果你的proc中有超过1个结果集,它可能会弄乱客户端代码
答案 4 :(得分: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
根据您更新内容的敏感程度,有时包含计数会很有帮助;但是,对于具有大量输出的复杂脚本,我通常希望将它们排除在外。
答案 5 :(得分:0)
SET NOCOUNT ON是一个oneline语句,Sql server将消息发送回客户端。这是为每个进程执行的(即..选择,插入,更新,删除)。如果你避免这个消息我们可以提高我们的整体性能数据库并减少网络流量
对于EX:
声明@a table(id int)
在
上设置nocount插入@a select 1 union select 2
关闭nocount
答案 6 :(得分:0)
停止指示受Transact-SQL语句影响的行数的消息作为结果的一部分返回。