NOCOUNT
在 SQL Server 查询中关闭的优点和缺点是什么?
7 回答
从 SQL BOL:
SET NOCOUNT ON 防止为存储过程中的每个语句向客户端发送 DONE_IN_PROC 消息。对于包含多个不返回太多实际数据的语句的存储过程,将 SET NOCOUNT 设置为 ON 可以显着提高性能,因为大大减少了网络流量。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms189837.aspx 。
此外,SQLServerCentral 上的这篇文章在这个主题上也很棒:
NOCOUNT 的性能影响
减少的不仅仅是网络流量。SQL Server 内部有一个提升,因为可以通过减少额外查询来优化执行计划,以确定有多少行受到影响。
它只是停止显示影响发送/显示的行数的消息,这提供了性能优势,特别是如果您有许多将返回消息的语句。它提高了性能,因为通过网络(在 sql 服务器和前端之间)发送的数据更少。
BOL 的更多内容:设置编号
由于上述原因,我总是将其设置为 ON,但如果您的 proc 中有超过 1 个结果集,它可能会弄乱客户端代码
对于以手动方式运行并使用大量语句输出调试消息的查询,我个人喜欢打开NOCOUNT 。Print
通过这种方式,您的输出看起来不像:
更新用户名 (更新了 287 行) 完毕 更新密码 (更新了 287 行) 完毕 做接下来的事 (更新了 1127 行) 完毕
更像
更新用户名 完毕 更新密码 完毕 做接下来的事 完毕
根据您更新内容的敏感性,有时包含计数会有所帮助;但是,对于具有大量输出的复杂脚本,我通常喜欢将它们排除在外。
SET NOCOUNT ON 是一个单行语句,Sql 服务器将消息发送回客户端。这是针对每个进程执行的(即 .. 选择、插入、更新、删除)。如果您避免此消息,我们可以提高数据库的整体性能,也减少网络流量
对于 EX:
声明@a table(id int)
设置不计数
插入 @a 选择 1 联合选择 2
取消计数
停止将指示受 Transact-SQL 语句影响的行数的消息作为结果的一部分返回。