La différence de performances massives SQL avec SELECT TOP x même lorsque x est beaucoup plus élevé que les lignes sélectionnées

Je suis la sélection des lignes à partir d'une fonction à valeur de table, mais ont trouvé un inexplicable énorme différence de performance en mettant SÉLECTIONNEZ HAUT dans la requête.

SELECT   col1, col2, col3 etc
FROM     dbo.some_table_function
WHERE    col1 = @parameter
--ORDER BY col1

est de prendre plus de 5 ou 6 minutes pour terminer.

Cependant

SELECT   TOP 6000 col1, col2, col3 etc
FROM     dbo.some_table_function
WHERE    col1 = @parameter
--ORDER BY col1

dure environ 4 ou 5 secondes.

Cela ne m'étonne pas si le retour de l'ensemble de ces données a été énorme, mais la requête spécifique impliqué retourne ~5000 lignes de 200 000 habitants.

Donc dans les deux cas, l'ensemble de la table est traitée, comme SQL Server continue jusqu'à la fin, à la recherche de 6000 lignes qui il n'y arriverez jamais. Pourquoi l'énorme différence alors? Est-ce quelque chose à voir avec la façon dont SQL Server alloue de l'espace dans l'anticipation du résultat de la taille de l'ensemble (HAUT 6000 ce qui lui confère un faible exigence qui est plus facilement affectés dans la mémoire)?
Quelqu'un d'autre a vu quelque chose comme cela?

Grâce

source d'informationauteur Ray | 2009-09-08