TOP против SET ROWCOUNT - PullRequest
       11

TOP против SET ROWCOUNT

13 голосов
/ 22 января 2009

Есть ли разница в производительности между TOP и SET ROWCOUNT или они выполняются одинаково?

Ответы [ 2 ]

10 голосов
/ 22 января 2009

Да, функционально это одно и то же. Насколько я знаю, между ними нет существенных различий в производительности.

Единственное, на что следует обратить внимание, это то, что, если у вас есть set rowcount, это будет сохраняться в течение всего срока действия соединения, поэтому убедитесь, что вы сбросили его на 0, как только закончите.


РЕДАКТИРОВАТЬ (опубликовать комментарий Мартина)

Область действия SET ROWCOUNT предназначена только для текущей процедуры. Это включает процедуры, вызываемые текущей процедурой. Он также включает динамический SQL, выполняемый с помощью EXEC или SP_EXECUTESQL, поскольку они считаются "дочерними" областями.

Обратите внимание, что SET ROWCOUNT находится в области действия BEGIN/END, но выходит за пределы этого.

create proc test1
as
begin
    begin
    set rowcount 100
    end
    exec ('select top 101 * from master..spt_values')
end
GO

exec test1
select top 102 * from master..spt_values

Результат = 100 строк, затем 102 строки

4 голосов
/ 20 марта 2014

Еще одна заметка о производительности, согласно BOL:

Как часть инструкции SELECT, оптимизатор запросов может учитывать значение выражения в предложениях TOP или FETCH во время оптимизации запроса. Поскольку SET ROWCOUNT используется вне оператора, выполняющего запрос, его значение не может учитываться в плане запроса.

Артикул на BOL

Это означает, что на самом деле может быть разница в производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...