Огромная разница в производительности SQL при использовании SELECT TOP x, даже если x намного выше выбранных строк
Я выбрал несколько строк из табличной функции, но обнаружил необъяснимую огромную разницу в производительности, поставив SELECT TOP в запросе.
SELECT col1, col2, col3 etc
FROM dbo.some_table_function
WHERE col1 = @parameter
--ORDER BY col1
занимает более 5 или 6 минут, чтобы завершить.
тем не мение
SELECT TOP 6000 col1, col2, col3 etc
FROM dbo.some_table_function
WHERE col1 = @parameter
--ORDER BY col1
завершается примерно за 4 или 5 секунд.
Это быменя не удивит, если возвращенный набор данных будет огромным,но конкретный запрос возвращает ~ 5000 строк из 200 000
Таким образом, в обоих случаях вся таблица обрабатывается, поскольку SQL Server продолжает поиск до 6000 строк, до которых он никогда не доберется. Почему тогда огромная разница? Это как-то связано с тем, как SQL Server выделяет пространство в ожидании размера набора результатов (тем самым TOP 6000 предъявляет к нему низкие требования, которые легче распределяются в памяти)? Кто-нибудь еще был свидетелем чего-то подобного?
Спасибо