Я выбираю некоторые строки из функции, зависящей от таблицы, но обнаружил необъяснимую значительную разницу в производительности, поставив 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 тем самым дает ему низкое требование, которое легче распределяется в памяти)? Кто-нибудь еще видел что-то подобное?
Спасибо