Beendet SQL Server TOP die Verarbeitung, sobald genügend Zeilen gefunden wurden?

8

Wenn Sie die SQL Server TOP -Klausel in einer Abfrage verwenden, hört das SQL Server-Modul auf, nach Zeilen zu suchen, sobald es genug ist, um das TOP X zu erfüllen, das zurückgegeben werden muss?

Betrachten Sie die folgenden Abfragen (unter der Annahme, dass some_text_field eindeutig und nicht für die Volltextindizierung festgelegt ist):

%Vor%

und

%Vor%

Die erste Abfrage müsste die gesamte Tabelle durchsuchen und alle gefundenen Ergebnisse zurückgeben. So wie wir es eingerichtet haben, würde diese Abfrage jemals wirklich einen Wert zurückgeben. Würden Sie also TOP 1 verwenden, um zu verhindern, dass der SQL Server den Rest der Tabelle scannt, nachdem er eine Übereinstimmung gefunden hat?

    
jzimmerman2011 13.03.2012, 16:57
quelle

2 Antworten

6

Ja, die Abfrage wird beendet, sobald genügend Zeilen gefunden wurden und der Rest der Tabelle (n) nicht abgefragt wird.

Beachten Sie jedoch, dass Sie wahrscheinlich einen Index haben möchten, den die Datenbank für die Abfrage verwenden kann. In diesem Fall gibt es keinen wirklichen Leistungsunterschied zwischen der ersten und der einzigen Übereinstimmung.

    
Guffa 13.03.2012, 17:00
quelle
5

Ja.

In diesem Fall würden Sie eine undefinierte Zeile erhalten (da TOP ohne ORDER BY kein bestimmtes Ergebnis garantiert), dann würde es die Verarbeitung stoppen (Der TOP Iterator im Plan wird keine weiteren Zeilen anfordern von untergeordneten Iteratoren).

Wenn im Plan vor dem Operator SORT oder parallel vor TOP ein blockierender Operator (wie TOP ) vorhanden ist, kann es am Ende für Zeilen, die im Endergebnis nicht zurückgegeben werden, viel Arbeit geben wie auch immer.

    
Martin Smith 13.03.2012 17:01
quelle