SQL Server TOP останавливает обработку, когда находит достаточно строк? - PullRequest
9 голосов
/ 13 марта 2012

Когда вы используете в запросе SQL Server TOP, останавливается ли механизм SQL Server при поиске строк, когда его достаточно для удовлетворения TOP X, которое необходимо вернуть?

Рассмотрим следующие запросы (предположим, что поле some_text_field уникально и не настроено для полнотекстовой индексации):

SELECT
    pk_id
FROM
    some_table
WHERE
    some_text_field = 'some_value';

и

SELECT TOP 1
    pk_id
FROM
    some_table
WHERE
    some_text_field = 'some_value';

Первый запрос должен будет выполнить поиск по всей таблице и вернуть все найденные результаты. Однако, как мы его настроили, этот запрос будет действительно возвращать одно значение. Таким образом, использование TOP 1 не позволит серверу SQL сканировать оставшуюся часть таблицы после того, как он найдет совпадение?

Ответы [ 2 ]

6 голосов
/ 13 марта 2012

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

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

5 голосов
/ 13 марта 2012

Да.

В этом случае вы получите 1 неопределенную строку (так как TOP без ORDER BY не гарантирует какой-либо конкретный результат), а затем остановит обработку (итератор TOP вплан не будет запрашивать больше строк у дочерних итераторов).

Если в плане есть оператор блокировки (например, SORT) до оператора TOP или параллельных операторов до TOP, это может привести к выполнению большой работы со строками, не возвращенными вокончательный результат в любом случае, хотя.

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