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?
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.
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.
Tags und Links sql sql-server database performance