Каковы преимущества и недостатки отключения NOCOUNT в запросах SQL-сервера? - PullRequest
14 голосов
/ 25 августа 2008

Каковы преимущества и недостатки отключения NOCOUNT в запросах SQL-сервера?

Ответы [ 7 ]

18 голосов
/ 25 августа 2008

Из SQL BOL:

SET NOCOUNT ON предотвращает отправку DONE_IN_PROC сообщения клиенту для каждого оператора в сохраненном процедура. Для хранимых процедур, которые содержат несколько утверждений, которые не вернуть много фактических данных, настройка SET NOCOUNT для ON может предоставить значительное повышение производительности , потому что сетевой трафик значительно уменьшен.

Подробнее см. http://msdn.microsoft.com/en-us/library/ms189837.aspx.
Кроме того, эта статья о SQLServerCentral отлично подходит для этой темы:
Производительные эффекты NOCOUNT

8 голосов
/ 25 августа 2008

И снижается не только сетевой трафик. В SQL Server имеется внутреннее повышение, поскольку план выполнения может быть оптимизирован за счет сокращения дополнительного запроса, чтобы выяснить, сколько строк было затронуто.

4 голосов
/ 25 августа 2008

Он просто останавливает сообщение, показывающее количество строк, произведенных для отправки / отображения, что обеспечивает производительность , особенно если у вас есть много операторов, которые будут возвращать сообщение. Это повышает производительность, поскольку по сети отправляется меньше данных (между сервером sql и внешним интерфейсом).

Больше на BOL: SET NOCOUNT

1 голос
/ 25 августа 2008

У меня всегда установлено значение ON по причинам, указанным выше, но если у вас есть более 1 набора результатов в вашем процессе, это может испортить код клиента

0 голосов
/ 09 апреля 2014

Останавливает, чтобы сообщение, указывающее количество строк, затронутых инструкцией Transact-SQL, не было возвращено как часть результатов.

0 голосов
/ 27 октября 2012

SET NOCOUNT ON - это оператор oneline, сервер Sql отправляет сообщение обратно клиенту. Это выполняется для каждого процесса (т. Е. Выберите, вставьте, обновите, удалите). База данных, а также уменьшить сетевой трафик

Для EX:

объявить @a таблицу (id int)

установить nocount на

вставить @a выбрать 1 союз выбрать 2

отключить отсчет

0 голосов
/ 25 августа 2008

Лично мне нравится включать 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

В зависимости от чувствительности того, что вы обновляете, иногда бывает полезно включить подсчет; однако для сложных сценариев с большим количеством выходных данных я обычно предпочитаю их опускать.

...