Quando si utilizza la clausola SQL Server TOP
in una query, il motore di SQL Server interrompe la ricerca di righe una volta che è sufficiente per soddisfare il TOP X
da restituire?SQL Server TOP interrompe l'elaborazione dopo aver trovato un numero sufficiente di righe?
Si consideri la seguente query (assumere some_text_field è unico e non è impostato per l'indicizzazione full-text):
SELECT
pk_id
FROM
some_table
WHERE
some_text_field = 'some_value';
e
SELECT TOP 1
pk_id
FROM
some_table
WHERE
some_text_field = 'some_value';
La prima query avrebbe bisogno di cercare l'intera tabella e ritorno tutti i risultati trovati Tuttavia, nel modo in cui lo abbiamo configurato, quella query restituirebbe davvero un valore. Quindi, utilizzare TOP 1
impedisce al server SQL di analizzare il resto della tabella una volta trovata una corrispondenza?
Sì, si ferma dopo la prima partita. – MicSim
Se si utilizza 'TOP x' ** senza ** fornendo un' ORDER BY', i risultati saranno casuali e non prevedibili. In quanto tale: poiché dovresti fornire un 'ORDER BY' perché la query abbia un senso, devi avere un indice appropriato per consentire al processore di query di recuperare le prime n righe in ordine e fermarsi dopo di ciò - altrimenti l'intera tabella deve essere scansionata e ordinata. –
@marc_s Il tuo commento è la migliore risposta. :) –