Cuando utiliza la cláusula SQL Server TOP
en una consulta, ¿el motor de SQL Server deja de buscar filas una vez que tiene suficiente para satisfacer el TOP X
necesario para ser devuelto?¿SQL Server TOP detiene el procesamiento una vez que encuentra suficientes filas?
considerar las siguientes consultas (asuma some_text_field es único y no se establece para la indización de texto completo):
SELECT
pk_id
FROM
some_table
WHERE
some_text_field = 'some_value';
y
SELECT TOP 1
pk_id
FROM
some_table
WHERE
some_text_field = 'some_value';
La primera consulta tendría que buscar en toda la mesa y vuelta todos los resultados que encontró. Sin embargo, la forma en que lo tenemos configurado, esa consulta realmente devolverá un valor. Entonces, ¿usaría TOP 1
para evitar que SQL Server escanee el resto de la tabla una vez que ha encontrado una coincidencia?
Sí, se detiene después de la primera coincidencia. – MicSim
Si usa 'TOP x' ** sin ** proporcionar un' ORDER BY', los resultados serán aleatorios y no predecibles. Como tal: dado que debe proporcionar un 'ORDER BY' para que la consulta tenga algún sentido, necesitará tener un índice apropiado para que el procesador de consultas pueda buscar las primeras n filas en orden y luego detenerlas - de lo contrario, toda la tabla debe escanearse y ordenarse. –
@marc_s Tu comentario es la mejor respuesta. :) –