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

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

Ответы

Ответ 1

От SQL BOL:

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

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

Ответ 2

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

Ответ 3

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

Подробнее в BOL: SET NOCOUNT

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

Для EX:

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

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

insert @a выберите 1 union select 2

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

Ответ 7

Останавливает сообщение о том, что количество строк, на которые ссылается оператор Transact-SQL, возвращается как часть результатов.