Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Operatoren beschreiben, wie SQL Server eine Abfrage oder eine DML-Anweisung (Data Manipulation Language) ausführt. Der Abfrageoptimierer verwendet Operatoren, um einen Abfrageplan zu erstellen, um das in der Abfrage angegebene Ergebnis zu erstellen oder den in der DML-Anweisung angegebenen Vorgang auszuführen. Der Abfrageplan ist eine Struktur, die aus physischen Operatoren besteht. Sie können den Abfrageplan anzeigen, indem Sie die SET SHOWPLAN-Anweisungen, die grafischen Ausführungsplanoptionen in SQL Server Management Studio oder die SQL Server Profiler Showplan-Ereignisklassen verwenden.
Operatoren werden als logische und physische Operatoren klassifiziert.
Logische Operatoren
Logische Operatoren beschreiben die relationale algebraische Operation, die zum Verarbeiten einer Anweisung verwendet wird. Mit anderen Worten, logische Operatoren beschreiben konzeptionell, welche Operation ausgeführt werden muss.
Physische Operatoren
Physische Operatoren implementieren den vorgang, der von logischen Operatoren beschrieben wird. Jeder physische Operator ist ein Objekt oder eine Routine, die einen Vorgang ausführt. Beispielsweise greifen einige physische Operatoren auf Spalten oder Zeilen aus einer Tabelle, einem Index oder einer Ansicht zu. Andere physische Operatoren führen andere Vorgänge aus, z. B. Berechnungen, Aggregationen, Datenintegritätsprüfungen oder Verknüpfungen. Physische Operatoren haben Kosten, die mit sich verbunden sind.
Die physischen Operatoren initialisieren, sammeln Daten und schließen. Insbesondere kann der physische Operator die folgenden drei Methodenaufrufe annehmen:
Init(): Die Init()-Methode bewirkt, dass sich ein physischer Operator selbst initialisiert und alle erforderlichen Datenstrukturen einrichtet. Ein physischer Operator kann viele Init()-Aufrufe erhalten, obwohl typischerweise nur einer empfangen wird.
GetNext(): Die GetNext() -Methode bewirkt, dass ein physischer Operator die erste oder nachfolgende Datenzeile erhält. Der physische Operator empfängt möglicherweise Null- oder viele GetNext()- Aufrufe.
Close(): Die Close()-Methode bewirkt, dass ein physischer Operator einige Bereinigungsvorgänge führt und sich selbst herunterfährt. Ein physischer Operator empfängt nur einen Close() -Aufruf.
Die GetNext()- Methode gibt eine Datenzeile zurück, und die Anzahl der Aufrufe wird als ActualRows in der Showplan-Ausgabe angezeigt, die mithilfe von SET STATISTICS PROFILE ON oder SET STATISTICS XML ON erstellt wird. Weitere Informationen zu diesen SET-Optionen finden Sie unter SET STATISTICS PROFILE (Transact-SQL) und SET STATISTICS XML (Transact-SQL).
Die ActualRebinds- und ActualRewinds-Anzahl, die in der Showplan-Ausgabe angezeigt wird, bezieht sich auf die Anzahl der Aufrufe der Init()-Methode. Wenn sich kein Operator auf der inneren Seite einer Schleifenverknödung befindet, ist ActualRebinds gleich 1 und ActualRewinds gleich Null. Wenn sich ein Operator auf der inneren Seite einer Schleifenverknüpfung befindet, sollte die Summe der Anzahl der Rebinds und Rückspulen der Anzahl der Zeilen entsprechen, die auf der äußeren Seite der Verknüpfung verarbeitet werden. Ein Rebind bedeutet, dass mindestens einer der korrelierten Parameter der Verknüpfung geändert wurde und die Innenseite neu ausgewertet werden muss. Ein Rücklauf bedeutet, dass keines der korrelierten Parameter geändert wurde und das vorherige innere Resultset möglicherweise wiederverwendet werden kann.
ActualRebinds und ActualRewinds sind in der XML-Showplan-Ausgabe vorhanden, die mithilfe von SET STATISTICS XML ON erzeugt wird. Sie werden nur für die Operatoren Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool und Table-valued Function aufgefüllt.
ActualRebinds und ActualRewinds können auch für die Assert Operatoren und Filter aufgefüllt werden, wenn das StartupExpression-Attribut auf TRUE festgelegt ist.
Wenn ActualRebinds und ActualRewinds in einem XML-Showplan vorhanden sind, sind sie mit "EstimateRebinds" und "EstimateRewinds" vergleichbar. Wenn sie nicht vorhanden sind, ist die geschätzte Anzahl von Zeilen (EstimateRows) mit der tatsächlichen Anzahl von Zeilen (ActualRows) vergleichbar. Beachten Sie, dass die tatsächliche grafische Showplan-Ausgabe Nullen für die tatsächlichen Rebinds und tatsächlichen Zurückspulen anzeigt, wenn sie nicht vorhanden sind.
Ein verwandter Zähler, ActualEndOfScans, ist nur verfügbar, wenn die Showplan-Ausgabe mithilfe von SET STATISTICS XML ON erstellt wird. Wenn ein physischer Operator das Ende des Datenstroms erreicht, wird dieser Zähler um eins erhöht. Ein physischer Operator kann das Ende seines Datenstroms null, ein oder mehrmals erreichen. Wie bei Rebinds und Rückspulen kann die Anzahl der Endscans nur mehr als eins betragen, wenn sich der Operator auf der inneren Seite einer Schleifenverknüpfung befindet. Die Anzahl der Endscans sollte kleiner oder gleich der Summe der Anzahl der Neubindungen und Rückspulen sein.
Zuordnung von physischen und logischen Operatoren
Der Abfrageoptimierer erstellt einen Abfrageplan als Baumstruktur, die aus logischen Operatoren besteht. Nachdem der Abfrageoptimierer den Plan erstellt hat, wählt der Abfrageoptimierer den effizientesten physischen Operator für jeden logischen Operator aus. Der Abfrageoptimierer verwendet einen kostenbasierten Ansatz, um zu bestimmen, welcher physische Operator einen logischen Operator implementiert.
In der Regel kann ein logischer Vorgang von mehreren physischen Operatoren implementiert werden. In seltenen Fällen kann ein physischer Operator jedoch auch mehrere logische Vorgänge implementieren.
Operatorbeschreibungen
Dieser Abschnitt enthält Beschreibungen der logischen und physischen Operatoren.
| Symbol für grafische Ausführungspläne | Showplan-Operator | BESCHREIBUNG |
|---|---|---|
| Nichts | Aggregate |
Der Aggregate Operator berechnet einen Ausdruck mit MIN, MAX, SUMME, ANZAHL oder AVG. Der Aggregate Operator kann ein logischer Operator oder ein physischer Operator sein. |
|
Arithmetic Expression |
Der Arithmetic Expression Operator berechnet einen neuen Wert aus vorhandenen Werten in einer Zeile.
Arithmetic Expression wird in SQL Server 2014 nicht verwendet. |
|
Assert |
Der Assert Operator überprüft eine Bedingung. Sie überprüft beispielsweise die referenzielle Integrität oder stellt sicher, dass eine skalare Unterabfrage eine Zeile zurückgibt. Für jede Eingabezeile wertet der Assert Operator den Ausdruck in der Argument Spalte des Ausführungsplans aus. Wenn dieser Ausdruck als NULL ausgewertet wird, wird die Zeile über den Assert Operator übergeben, und die Abfrageausführung wird fortgesetzt. Wenn dieser Ausdruck als Nichtnullwert ausgewertet wird, wird der entsprechende Fehler ausgelöst. Der Assert Operator ist ein physischer Operator. |
|
Assign |
Der Assign Operator weist den Wert eines Ausdrucks oder einer Konstante einer Variablen zu.
Assign ist ein Sprachelement. |
| Nichts | Asnyc Concat |
Der Asnyc Concat Operator wird nur in Remoteabfragen (verteilte Abfragen) verwendet. Er verfügt über n untergeordnete Elemente und einen übergeordneten Knoten. In der Regel sind einige der untergeordneten Geräte Remote-Computer und nehmen an einer verteilten Abfrage teil.
Asnyc Concat sendet open() gleichzeitig Aufrufe an alle untergeordneten Elemente und wendet dann eine Bitmap auf jedes dieser Elemente an. Für jedes Bit, das eine 1 ist, sendet Async Concat bei Bedarf die Ausgabezeilen an den übergeordneten Knoten. |
|
Bitmap |
SQL Server verwendet den Operator zum Implementieren der Bitmap Bitmapfilterung in parallelen Abfrageplänen. Durch die Bitmapfilterung wird die Abfrageausführung beschleunigt, indem Zeilen mit Schlüsselwerten, die keine Verknüpfungsdatensätze erzeugen können, vermieden werden, bevor Zeilen durch einen anderen Operator wie den Parallelism Operator übergeben werden. Ein Bitmapfilter verwendet eine kompakte Darstellung einer Gruppe von Werten aus einer Tabelle in einem Teil der Operatorstruktur, um Zeilen aus einer zweiten Tabelle in einem anderen Teil der Struktur zu filtern. Durch das Entfernen unnötiger Zeilen frühzeitig in der Abfrage verfügen nachfolgende Operatoren über weniger Zeilen, mit denen sie arbeiten können, und die Gesamtleistung der Abfrage verbessert sich. Der Optimierer bestimmt, wann eine Bitmap selektiv genug ist, um nützlich zu sein und in welchen Operatoren der Filter angewendet werden soll.
Bitmap ist ein physischer Operator. |
|
Bitmap Create |
Der Bitmap Create Operator wird in der Showplan-Ausgabe angezeigt, in der Bitmaps erstellt werden.
Bitmap Create ist ein logischer Operator. |
|
Bookmark Lookup |
Der Bookmark Lookup-Operator verwendet ein Lesezeichen (Zeilen-ID oder Clusterschlüssel), um die entsprechende Zeile in der Tabelle oder dem Clustered-Index abzurufen. Die Argument Spalte enthält die Lesezeichenbeschriftung, die zum Auffinden der Zeile in der Tabelle oder im gruppierten Index verwendet wird. Die Argument Spalte enthält auch den Namen der Tabelle oder des gruppierten Indexes, in dem die Zeile nachschlagen wird. Wenn die WITH PREFETCH-Klausel in der Argument Spalte angezeigt wird, hat der Abfrageprozessor festgestellt, dass es optimal ist, asynchrones Vorabfetching (Vorlesen) beim Nachschlagen von Lesezeichen in der Tabelle oder gruppierten Index zu verwenden.Bookmark Lookup wird in SQL Server 2014 nicht verwendet. Stattdessen sorgen Clustered Index Seek und RID Lookup für die Textmarken-Nachschlagefunktionen. Der Key Lookup Operator stellt diese Funktionalität ebenfalls bereit. |
| Nichts | Branch Repartition |
In einem parallelen Abfrageplan gibt es manchmal konzeptionelle Bereiche von Iteratoren. Alle Iteratoren innerhalb eines solchen Bereichs können von parallelen Threads ausgeführt werden. Die Regionen selbst müssen seriell ausgeführt werden. Einige der Parallelism Iteratoren innerhalb einer einzelnen Region werden Branch Repartition genannt. Der Parallelism Iterator an der Grenze von zwei solchen Regionen wird Segment Repartition genannt.
Branch Repartition und Segment Repartition sind logische Operatoren. |
| Nichts | Broadcast |
Broadcast hat einen untergeordneten Knoten und n übergeordnete Knoten.
Broadcast sendet die Eingabezeilen an mehrere Verbraucher bei Bedarf. Jeder Kunde erhält alle Datensätze. Wenn beispielsweise alle Verbraucher Seiten einer Hash-Verknüpfung erstellen, werden n Kopien der Hashtabellen erstellt. |
|
Build Hash |
Gibt die Erstellung einer Batchhashtabelle für einen speicheroptimierten xVelocity-Spaltenspeicherindex an. |
| Nichts | Cache |
Cache ist eine spezialisierte Version des Spool-Operators. Es speichert nur eine Datenzeile.
Cache ist ein logischer Operator.
Cache wird in SQL Server 2014 nicht verwendet. |
|
Clustered Index Delete |
Der Clustered Index Delete Operator löscht Zeilen aus dem gruppierten Index, der in der Spalte "Argument" des Abfrageausführungsplans angegeben ist. Wenn ein WHERE:()-Prädikat in der Argumentspalte vorhanden ist, werden nur die Zeilen gelöscht, die das Prädikat erfüllen.
Clustered Index Delete ist ein physischer Operator. |
|
Clustered Index Insert |
Der Clustered Index Insert Showplan-Operator fügt Zeilen aus der Eingabe in den gruppierten Index ein, der in der Spalte Argument angegeben ist. Die Argumentspalte enthält auch ein SET:()-Prädikat, das den Wert angibt, auf den jede Spalte festgelegt ist. Wenn Clustered Index Insert keine untergeordneten Elemente für das Einfügen von Werten vorhanden sind, wird die eingefügte Zeile vom Insert Operator selbst übernommen.
Clustered Index Insert ist ein physischer Operator. |
|
Gruppierter Indexzusammenführung | Der Operator Zusammenführen von gruppierten Indizes wendet einen zusammengeführten Datenstrom auf einen gruppierten Index an. Der Operator löscht, aktualisiert oder fügt Zeilen aus dem gruppierten Index ein, der in der Argument Spalte des Operators angegeben ist. Der tatsächliche vorgang, der ausgeführt wird, hängt vom Laufzeitwert der in der Argument Spalte des Operators angegebenen ACTION-Spalte ab.
Clustered-Index-Merge ist ein physischer Operator. |
|
Clustered Index Scan |
Der Clustered Index Scan Operator überprüft den gruppierten Index, der in der Spalte "Argument" des Abfrageausführungsplans angegeben ist. Wenn ein optionales WHERE:()-Prädikat vorhanden ist, werden nur die Zeilen zurückgegeben, die das Prädikat erfüllen. Wenn die Argumentspalte die ORDERED-Klausel enthält, hat der Abfrageprozessor angefordert, dass die Ausgabe der Zeilen in der Reihenfolge zurückgegeben wird, in der der gruppierte Index sortiert wurde. Wenn die ORDERED-Klausel nicht vorhanden ist, überprüft das Speichermodul den Index optimal, ohne dass die Ausgabe sortiert wird.
Clustered Index Scan ist ein logischer und physischer Operator. |
|
Clustered Index Seek |
Der Clustered Index Seek Operator verwendet die Suchfähigkeit von Indizes zum Abrufen von Zeilen aus einem gruppierten Index. Die Argument Spalte enthält den Namen des verwendeten gruppierten Indexes und des SEEK:()-Prädikats. Das Speichermodul verwendet den Index, um nur die Zeilen zu verarbeiten, die dieses SEEK:()-Prädikat erfüllen. Es kann auch ein WHERE:()-Prädikat enthalten, bei dem das Speichermodul für alle Zeilen ausgewertet wird, die das SEEK:()-Prädikat erfüllen, dies ist jedoch optional und verwendet keine Indizes, um diesen Vorgang abzuschließen.Wenn die Spalte die Argument ORDERED-Klausel enthält, hat der Abfrageprozessor festgestellt, dass die Zeilen in der Reihenfolge zurückgegeben werden müssen, in der der gruppierte Index sie sortiert hat. Wenn die ORDERED-Klausel nicht vorhanden ist, durchsucht das Speichermodul den Index optimal, ohne die Ausgabe unbedingt zu sortieren. Das Zulassen, dass die Ausgabe die Sortierung beibehalten kann, kann weniger effizient sein als die Erstellung nicht sortierter Ausgaben. Wenn das Stichwort LOOKUP angezeigt wird, wird eine Lesezeichensuche ausgeführt. In SQL Server 2008 und höheren Versionen bietet der Key Lookup Operator Textmarken-Nachschlagefunktionen.
Clustered Index Seek ist ein logischer und physischer Operator. |
|
Clustered Index Update |
Der Clustered Index Update Operator aktualisiert eingabezeilen im gruppierten Index, der in der Argument Spalte angegeben ist. Wenn ein WHERE:()-Prädikat vorhanden ist, werden nur die Zeilen aktualisiert, die diesem Prädikat entsprechen. Wenn ein SET:()-Prädikat vorhanden ist, wird jede aktualisierte Spalte auf diesen Wert festgelegt. Wenn ein DEFINE:()-Prädikat vorhanden ist, werden die von diesem Operator definierten Werte aufgelistet. Auf diese Werte kann in der SET-Klausel oder an anderer Stelle innerhalb dieses Operators und an anderer Stelle innerhalb dieser Abfrage verwiesen werden.
Clustered Index Update ist ein logischer und physischer Operator. |
|
Collapse |
Der Collapse Operator optimiert die Aktualisierungsverarbeitung. Wenn eine Aktualisierung ausgeführt wird, kann sie (mithilfe des Split Operators) in einen Löschvorgang und einen Einfügevorgang aufgeteilt werden. Die Argument Spalte enthält eine GROUP BY:()-Klausel, die eine Liste der Schlüsselspalten angibt. Wenn der Abfrageprozessor auf benachbarte Zeilen trifft, die dieselben Schlüsselwerte löschen und einfügen, ersetzt er diese separaten Vorgänge durch einen einzigen effizienteren Aktualisierungsvorgang.
Collapse ist ein logischer und physischer Operator. |
|
Columnstore Index Scan |
Der Columnstore Index Scan Operator überprüft den in der Argument Spalte des Abfrageausführungsplans angegebenen Columnstore-Index. |
|
Compute Scalar |
Der Compute Scalar Operator wertet einen Ausdruck aus, um einen berechneten Skalarwert zu erzeugen. Dies kann dann an den Benutzer zurückgegeben werden, auf den an anderer Stelle in der Abfrage verwiesen wird, oder beides. Ein Beispiel für beides findet sich in einem Filterprädikat oder einem Joinprädikat.
Compute Scalar ist ein logischer und physischer Operator.Compute Scalar Operatoren, die in Showplans angezeigt werden, die von SET STATISTICS XML generiert werden, enthalten möglicherweise nicht das RunTimeInformation Element. In grafischen Showplans sind Actual Rows, Actual Rebinds und Actual Rewinds möglicherweise im Eigenschaftenfenster nicht vorhanden, wenn die Option "Tatsächlichen Ausführungsplan einbeziehen" in SQL Server Management Studio ausgewählt ist. In diesem Fall bedeutet dies, dass diese Operatoren zwar im kompilierten Abfrageplan verwendet wurden, aber ihre Arbeit von anderen Operatoren im Laufzeitabfrageplan ausgeführt wurde. Beachten Sie zudem, dass die Anzahl der Ausführungen in der von SET STATISTICS PROFILE generierten Showplan-Ausgabe gleichbedeutend mit der Summe der Rebinds und Wiederholungen in den von SET STATISTICS XML generierten Showplans ist. |
|
Verkettung | Der Verkettungsoperator überprüft mehrere Eingaben und gibt jede gescannte Zeile zurück. Die Verkettung wird in der Regel verwendet, um das Transact-SQL UNION ALL-Konstrukt zu implementieren. Der physikalische Verkettungsoperator verfügt über zwei oder mehr Eingänge und eine Ausgabe. Die Verkettung kopiert Zeilen aus dem ersten Eingabedatenstrom in den Ausgabedatenstrom und wiederholt diesen Vorgang für jeden zusätzlichen Eingabedatenstrom. Die Verkettung ist ein logischer und physischer Operator. |
|
Constant Scan |
Der Constant Scan Operator führt eine oder mehrere konstante Zeilen in eine Abfrage ein. Ein Compute Scalar Operator wird häufig nach einem Constant Scan Operator verwendet, um Spalten zu einer Zeile hinzuzufügen, die vom Constant Scan Operator erstellt wird. |
|
Convert |
Der Convert Operator konvertiert einen skalaren Datentyp in einen anderen.
Convert ist ein Sprachelement. |
| Nichts | Cross Join |
Der Cross Join Operator verknüpft jede Zeile aus der ersten (oberen) Eingabe mit jeder Zeile aus der zweiten (unteren) Eingabe.
Cross Join ist ein logischer Operator. |
|
catchall |
Das Catchall-Symbol wird angezeigt, wenn ein geeignetes Symbol für den Iterator nicht durch die Logik gefunden werden kann, die grafische Showplans erzeugt. Das Catchall-Symbol weist nicht unbedingt auf einen Fehlerzustand hin. Es gibt drei allgemeine Symbole: blau (für Iteratoren), orange (für Cursor) und grün (für Transact-SQL Sprachelemente). |
| Nichts | Cursor | Die logischen und physischen Operatoren des Cursors werden verwendet, um zu beschreiben, wie eine Abfrage oder Aktualisierung mit Cursorvorgängen ausgeführt wird. Die physikalischen Operatoren beschreiben den physikalischen Implementierungsalgorithmus, der zum Verarbeiten des Cursors verwendet wird; Beispiel: Verwenden eines keysetgesteuerten Cursors. Jeder Schritt bei der Ausführung eines Cursors umfasst einen physischen Operator. Die logischen Operatoren beschreiben eine Eigenschaft des Cursors, wie beispielsweise, dass der Cursor schreibgeschützt ist. Logische Operatoren umfassen asynchrone, optimistische, primäre, schreibgeschützte Operatoren, Scroll-Operatoren, sekundäre und synchrone Operatoren. Physische Operatoren umfassen Dynamic, Fetch Query, Keyset, Population Query, Refresh Query und Snapshot. |
) |
Declare |
Der Declare Operator weist eine lokale Variable im Abfrageplan zu.
Declare ist ein Sprachelement. |
|
Delete |
Der Delete-Operator löscht aus einem Objekt die Zeilen, die das optionale Prädikat in der Argument-Spalte erfüllen. |
|
Deleted Scan |
Der Deleted Scan Operator durchsucht die gelöschte Tabelle innerhalb eines Triggers. |
| Nichts | Distinct |
Der Distinct Operator entfernt Duplikate aus einem Rowset oder aus einer Auflistung von Werten.
Distinct ist ein logischer Operator. |
| Nichts | Distinct Sort |
Der Distinct Sort logische Operator überprüft die Eingabe, entfernt Duplikate und sortiert nach den Spalten, die in der DISTINCT ORDER BY:() Bedingung der Argument Spalte angegeben sind.
Distinct Sort ist ein logischer Operator. |
|
Verteilen von Datenströmen | Der Operator "Datenströme verteilen " wird nur in parallelen Abfrageplänen verwendet. Der Operator "Datenströme verteilen " verwendet einen einzelnen Eingabedatenstrom von Datensätzen und erzeugt mehrere Ausgabedatenströme. Der Datensatzinhalt und das Format werden nicht geändert. Jeder Datensatz aus dem Eingabedatenstrom wird in einem der Ausgabedatenströme angezeigt. Dieser Operator behält automatisch die relative Reihenfolge der Eingabedatensätze in den Ausgabedatenströmen bei. In der Regel wird hashing verwendet, um zu entscheiden, zu welchem Ausgabedatenstrom ein bestimmter Eingabedatensatz gehört. Wenn die Ausgabe partitioniert ist, enthält die Argument Spalte ein PARTITIONSSPALTEN:()-Prädikat und die Partitionierungsspalten.
Verteilen von Datenströmen ist ein logischer Operator |
|
Dynamic |
Der Dynamic Operator verwendet einen Cursor, der alle von anderen Personen vorgenommenen Änderungen sehen kann. |
|
Eifrige Spule | Der Operator "Eager Spool " verwendet die gesamte Eingabe und speichert jede Zeile in einem ausgeblendeten temporären Objekt, das in der tempdb Datenbank gespeichert ist. Wenn der Operator zurückgespult wird (z. B. durch einen Nested Loops operator), aber keine Neubindung erforderlich ist, werden die zwischengespeicherten Daten verwendet, anstatt die Eingabe erneut zu scannen. Wenn eine erneute Bindung erforderlich ist, werden die gepoolten Daten verworfen, und das Spoolobjekt wird neu erstellt, indem die (rebound) Eingabe erneut gescannt wird. Der Eager Spool Operator erstellt seine Zwischenspeicherdatei auf eifrige Weise: Wenn der übergeordnete Operator des Zwischenspeichers nach der ersten Zeile fragt, liest der Spooloperator alle Zeilen vom Eingabeoperator und speichert sie im Zwischenspeicher.
Eager Spool ist ein logischer Operator. |
() |
Fetch Query |
Der Fetch Query-Operator ruft Zeilen ab, wenn ein Fetch für einen Cursor ausgegeben wird. |
|
Filter | Der Filteroperator überprüft die Eingabe und gibt nur die Zeilen zurück, die den Filterausdruck (Prädikat) erfüllen, der in der Argument Spalte angezeigt wird. |
| Nichts | Flow Distinct |
Der Flow Distinct logische Operator überprüft die Eingabe und entfernt Duplikate. Während der Distinct Operator alle Eingaben verwendet, bevor eine Ausgabe erzeugt wird, gibt der FlowDistinct-Operator jede Zeile zurück, wie sie aus der Eingabe abgerufen wird (es sei denn, diese Zeile ist ein Duplikat, in diesem Fall wird sie verworfen). |
| Nichts | Full Outer Join |
Der Full Outer Join logische Operator gibt jede Zeile zurück, die das Join-Prädikat aus der ersten (oberen) Eingabe erfüllt, die mit jeder Zeile aus der zweiten (unteren) Eingabe verknüpft ist. Sie gibt auch Zeilen aus:-Die erste Eingabe, die in der zweiten Eingabe keine Übereinstimmungen hatte. -Die zweite Eingabe hatte keine Übereinstimmungen mit der ersten Eingabe. Die Eingabe, die die übereinstimmenden Werte nicht enthält, wird als Nullwert zurückgegeben. Full Outer Join ist ein logischer Operator. |
|
Datenströme sammeln | Der Operator "Gather Streams " wird nur in parallelen Abfrageplänen verwendet. Der Operator " Gather Streams " verwendet mehrere Eingabedatenströme und erzeugt einen einzelnen Ausgabedatenstrom mit Datensätzen, indem die Eingabedatenströme kombiniert werden. Der Datensatzinhalt und das Format werden nicht geändert. Wenn dieser Operator die Reihenfolge beibehält, müssen alle Eingabedatenströme geordnet sein. Wenn die Ausgabe sortiert ist, enthält die Argument Spalte ein ORDER BY:()-Prädikat und die Namen der sortierten Spalten.
Gather Streams ist ein logischer Operator. |
|
Hash Match |
Der Hash Match Operator erstellt eine Hashtabelle, indem ein Hashwert für jede Zeile anhand der Buildeingabe berechnet wird. Ein HASH:()-Prädikat mit einer Liste von Spalten, die zum Erstellen eines Hashwerts verwendet werden, wird in der Argument Spalte angezeigt. Anschließend berechnet sie für jede Probezeile (wie zutreffend) einen Hashwert (mit derselben Hashfunktion) und sucht in der Hashtabelle nach Übereinstimmungen. Wenn ein Rest-Prädikat vorhanden ist (durch REST:() in der Argument Spalte identifiziert), muss dieses Prädikat auch erfüllt sein, damit Zeilen als Übereinstimmung betrachtet werden. Das Verhalten hängt von dem logischen Vorgang ab, der ausgeführt wird:Verwenden Sie für alle Verknüpfungen die erste (obere) Eingabe, um die Hashtabelle und die zweite (untere) Eingabe zu erstellen, um die Hashtabelle zu untersuchen. Ergebnisse werden basierend auf dem Verknüpfungstyp entweder als Übereinstimmungen oder Nichtübereinstimmungen ausgegeben. Wenn mehrere Verknüpfungen dieselbe Verknüpfungsspalte verwenden, werden diese Vorgänge in ein Hashteam gruppiert. Verwenden Sie für die eindeutigen oder Aggregatoperatoren die Eingabe, um die Hashtabelle zu erstellen (Entfernen von Duplikaten und Berechnen aller Aggregatausdrücke). Wenn die Hashtabelle erstellt wird, scannen Sie die Tabelle, und geben Sie alle Einträge aus. Verwenden Sie für den Union-Operator die erste Eingabe zum Erstellen der Hashtabelle (Entfernen von Duplikaten). Verwenden Sie die zweite Eingabe (die keine Duplikate enthalten darf), um die Hashtabelle zu untersuchen, alle Zeilen zurückzugeben, die keine Übereinstimmungen aufweisen, und scannen Sie dann die Hashtabelle, und geben Sie alle Einträge zurück. Hash Match ist ein physischer Operator. |
|
If |
Der If Operator führt die bedingte Verarbeitung basierend auf einem Ausdruck aus.
If ist ein Sprachelement. |
| Nichts | Inner Join |
Der Inner Join logische Operator gibt jede Zeile zurück, die die Verknüpfung der ersten (oberen) Eingabe mit der zweiten (unteren) Eingabe erfüllt. |
|
Insert |
Der Insert logische Operator fügt jede Zeile aus der Eingabe in das in der Argument Spalte angegebene Objekt ein. Der physische Operator ist entweder der Table Insert, Index Insert oder Clustered Index Insert Operator. |
|
Eingefügter Scan | Der Operator "Eingefügter Scan " überprüft die eingefügte Tabelle. Der eingefügte Scan ist ein logischer und physischer Operator. |
|
Intrinsic |
Der Intrinsic Operator ruft eine interne Transact-SQL-Funktion auf.
Intrinsic ist ein Sprachelement. |
|
Iterator |
Das Iterator Catchall-Symbol wird angezeigt, wenn ein geeignetes Symbol für den Iterator nicht von der Logik gefunden wird, die grafische Showplans erzeugt. Das Catchall-Symbol weist nicht unbedingt auf einen Fehlerzustand hin. Es gibt drei Catchall-Symbole: Blau (für Iteratoren), Orange (für Cursor) und Grün (für Transact-SQL Sprachkonstrukte). |
|
Key Lookup |
Der Key Lookup Operator ist ein Bookmark-Lookup in einer Tabelle mit einem gruppierten Index. Die Argument Spalte enthält den Namen des gruppierten Indexes und den Clusterschlüssel, der zum Nachschlagen der Zeile im gruppierten Index verwendet wird.
Key Lookup wird immer von einem Nested Loops-Operator begleitet. Wenn die WITH PREFETCH-Klausel in der Argument Spalte angezeigt wird, hat der Abfrageprozessor festgestellt, dass es optimal ist, beim Nachschlagen von Lesezeichen im gruppierten Index asynchrones Vorabfetching (Vorlesen) zu verwenden.Die Verwendung eines Key Lookup Operators in einem Abfrageplan gibt an, dass die Abfrage von der Leistungsoptimierung profitieren kann. Beispielsweise kann die Abfrageleistung verbessert werden, indem ein abgedeckter Index hinzugefügt wird. |
|
Keyset |
Der Keyset Operator verwendet einen Cursor, der Aktualisierungen sehen kann, aber keine Einfügungen von anderen. |
|
Language Element |
Das Language Element Catchall-Symbol wird angezeigt, wenn die Logik, die grafische Showplans erzeugt, kein geeignetes Symbol für den Iterator findet. Das Catchall-Symbol weist nicht unbedingt auf einen Fehlerzustand hin. Es gibt drei Catchall-Symbole: Blau (für Iteratoren), Orange (für Cursor) und Grün (für Transact-SQL Sprachkonstrukte). |
|
Lazy Spool | Der logische Operator "Lazy Spool " speichert jede Zeile aus der Eingabe in einem ausgeblendeten temporären Objekt, das in der tempdb Datenbank gespeichert ist. Wenn der Operator zurückgespult wird (z. B. durch einen Nested Loops operator), aber keine Neubindung erforderlich ist, werden die zwischengespeicherten Daten verwendet, anstatt die Eingabe erneut zu scannen. Wenn eine erneute Bindung erforderlich ist, werden die gepoolten Daten verworfen, und das Spoolobjekt wird neu erstellt, indem die (rebound) Eingabe erneut gescannt wird. Der Lazy Spool-Operator erstellt seine Spooldatei auf "faule" Weise, d. h. jedes Mal, wenn der übergeordnete Operator des Spools nach einer Zeile fragt, erhält der Spooloperator eine Zeile vom Eingabeoperator und speichert sie im Spool, anstatt alle Zeilen gleichzeitig zu verbrauchen. Lazy Spool ist ein logischer Operator. |
| Nichts | Left Anti Semi Join |
Der Left Anti Semi Join Operator gibt jede Zeile aus der ersten (oberen) Eingabe zurück, wenn keine übereinstimmende Zeile in der zweiten (unteren) Eingabe vorhanden ist. Wenn in der Argument Spalte kein Join-Prädikat vorhanden ist, handelt es sich bei jeder Zeile um eine übereinstimmende Zeile.
Left Anti Semi Join ist ein logischer Operator. |
| Nichts | Left Outer Join |
Der Left Outer Join Operator gibt jede Zeile zurück, die die Verknüpfung der ersten (oberen) Eingabe mit der zweiten (unteren) Eingabe erfüllt. Außerdem werden alle Zeilen aus der ersten Eingabe zurückgegeben, für die keine übereinstimmenden Zeilen in der zweiten Eingabe vorhanden sind. Die nicht übereinstimmenden Zeilen in der zweiten Eingabe werden als NULL-Werte zurückgegeben. Wenn in der Argument Spalte kein Join-Prädikat vorhanden ist, handelt es sich bei jeder Zeile um eine übereinstimmende Zeile.
Left Outer Join ist ein logischer Operator. |
| Nichts | Left Semi Join |
Der Left Semi Join Operator gibt jede Zeile aus der ersten (oberen) Eingabe zurück, wenn eine übereinstimmende Zeile in der zweiten (unteren) Eingabe vorhanden ist. Wenn in der Argument Spalte kein Join-Prädikat vorhanden ist, handelt es sich bei jeder Zeile um eine übereinstimmende Zeile.
Left Semi Join ist ein logischer Operator. |
|
Log Row Scan |
Der Log Row Scan Operator durchsucht das Transaktionsprotokoll.
Log Row Scan ist ein logischer und physischer Operator. |
|
Merge Interval |
Der Merge Interval Operator führt mehrere (potenziell überlappende) Intervalle zusammen, um minimale, nicht überlappende Intervalle zu erzeugen, die dann zum Suchen nach Indexeinträgen verwendet werden. Dieser Operator wird in der Regel oberhalb eines oder mehrerer Compute Scalar Operatoren über Constant Scan Operatoren angezeigt, die die Intervalle (dargestellt als Spalten in einer Zeile) erstellen, die dieser Operator zusammenführt.
Merge Interval ist ein logischer und physischer Operator. |
|
Zusammenführen | Der Merge Join Operator führt die innere Verknüpfung, die linke äußere Verknüpfung, die linke semijoin, die linke Anti-semi-Verknüpfung, die rechte äußere Verknüpfung, die rechte semijoin, die rechte Anti-semi-Verknüpfung und die logischen Vereinigungsvorgänge aus. In der Argument-Spalte enthält der Merge-Join-Operator ein MERGE:()-Prädikat, wenn der Vorgang eine 1:n-Verknüpfung ausführt, oder ein MANY-TO-MANY-MERGE:()-Prädikat, wenn der Vorgang eine n:n-Verknüpfung ausführt. Die Argument Spalte enthält auch eine durch Trennzeichen getrennte Liste von Spalten, die zum Ausführen des Vorgangs verwendet werden. Der Zusammenführungsoperator erfordert zwei Eingaben, die nach ihren jeweiligen Spalten sortiert sind, z. B. durch Einfügen expliziter Sortiervorgänge in den Abfrageplan. Das Merge-Join ist besonders effektiv, wenn eine explizite Sortierung nicht erforderlich ist, zum Beispiel wenn ein geeigneter B-Baum-Index in der Datenbank vorhanden ist oder die Sortierreihenfolge für mehrere Operationen, wie ein Merge-Join und eine Gruppierung mit Rollup, ausgenutzt werden kann.
Merge Join ist ein physischer Operator. |
|
Nested Loops |
Der Nested Loops-Operator führt die innere Verknüpfung, die linke äußere Verknüpfung, die linke Semi-Verknüpfung und die linke Anti-Semi-Verknüpfung logische Vorgänge aus. Geschachtelte Schleifen-Verknüpfungen führen eine Suche in der inneren Tabelle für jede Zeile der äußeren Tabelle aus, in der Regel mithilfe eines Indexes. Der Abfrageprozessor entscheidet basierend auf erwarteten Kosten, ob die äußere Eingabe sortiert werden soll, um die Lokalität der Suchvorgänge im Index über die innere Eingabe zu verbessern. Alle Zeilen, die das (optionale) Prädikat in der Argument Spalte erfüllen, werden je nach ausgeführtem logischen Vorgang zurückgegeben.
Nested Loops ist ein physischer Operator. |
|
Nonclustered Index Delete |
Der Nonclustered Index Delete Operator löscht Eingabezeilen aus dem in der Argument Spalte angegebenen nicht gruppierten Index.
Nonclustered Index Delete ist ein physischer Operator. |
|
Index Insert |
Der Index Insert Operator fügt Zeilen aus der Eingabe in den nicht gruppierten Index ein, der in der Argument Spalte angegeben ist. Die Argument Spalte enthält auch ein SET:()-Prädikat, das den Wert angibt, auf den jede Spalte festgelegt ist.
Index Insert ist ein physischer Operator. |
) |
Index Scan |
Der Index Scan Operator ruft alle Zeilen aus dem in der Argument Spalte angegebenen nicht gruppierten Index ab. Wenn ein optionales WHERE:()-Prädikat in der Argument Spalte angezeigt wird, werden nur die Zeilen zurückgegeben, die das Prädikat erfüllen.
Index Scan ist ein logischer und physischer Operator. |
|
Index Seek |
Der Index Seek Operator verwendet die Suchfähigkeit von Indizes, um Zeilen aus einem nicht gruppierten Index abzurufen. Die Argument Spalte enthält den Namen des verwendeten nicht gruppierten Indexes. Es enthält auch das SEEK:()-Prädikat. Das Speichermodul verwendet den Index, um nur die Zeilen zu verarbeiten, die das SEEK:()-Prädikat erfüllen. Es kann optional ein WHERE:()-Prädikat enthalten, das vom Speichermodul für alle Zeilen ausgewertet wird, die das SEEK:()-Prädikat erfüllen (dazu werden die Indizes nicht verwendet). Wenn die Spalte die Argument ORDERED-Klausel enthält, hat der Abfrageprozessor festgestellt, dass die Zeilen in der Reihenfolge zurückgegeben werden müssen, in der der nicht gruppierte Index sie sortiert hat. Wenn die ORDERED-Klausel nicht vorhanden ist, durchsucht das Speichermodul den Index optimal (was nicht garantiert, dass die Ausgabe sortiert wird). Die Beibehaltung der Sortierung der Ausgabe kann weniger effizient sein als die Erzeugung nicht sortierter Ausgaben.
Index Seek ist ein logischer und physischer Operator. |
|
Index-Spool | Der physische Index-Spooloperator enthält ein SEEK:()-Prädikat in der Argument Spalte. Der Index-Spool-Operator überprüft seine Eingabezeilen, platziert eine Kopie jeder Zeile in einer ausgeblendeten Spooldatei (gespeichert in der tempdb Datenbank und nur für die Lebensdauer der Abfrage) und erstellt einen nicht gruppierten Index für die Zeilen. Auf diese Weise können Sie die Suchfunktion von Indizes verwenden, um nur die Zeilen auszugeben, die das SEEK:()-Prädikat erfüllen. Wenn der Operator zurückgespult wird (z. B. durch einen Nested Loops operator), aber keine Neubindung erforderlich ist, werden die zwischengespeicherten Daten verwendet, anstatt die Eingabe erneut zu scannen. |
|
Nonclustered Index Update |
Der Nonclustered Index Update physische Operator aktualisiert Zeilen aus seiner Eingabe im nicht gruppierten Index, der in der Argument Spalte angegeben ist. Wenn ein SET:()-Prädikat vorhanden ist, wird jede aktualisierte Spalte auf diesen Wert festgelegt.
Nonclustered Index Update ist ein physischer Operator. |
|
Onlineindex einfügen | Der physische Operator "Onlineindex einfügen " gibt an, dass online ein Indexerstellungs-, Änderungs- oder Drop-Vorgang ausgeführt wird. Das heißt, die zugrunde liegenden Tabellendaten bleiben benutzern während des Indexvorgangs zur Verfügung. |
| Nichts | Parallelism |
Der Parallelism Operator führt die logischen Vorgänge "Datenströme verteilen", "Datenströme sammeln" und "Neupartitionieren" aus. Die Argument Spalten können ein PARTITIONSSPALTEN:() Prädikat mit einer durch Trennzeichen getrennten Liste der Spalten enthalten, die partitioniert werden. Die Argument Spalten können auch ein ORDER BY:()-Prädikat enthalten und die Spalten auflisten, um die Sortierreihenfolge während der Partitionierung beizubehalten.
Parallelism ist ein physischer Operator.Hinweis: Wenn eine Abfrage als parallele Abfrage kompiliert wurde, aber zur Laufzeit als serielle Abfrage ausgeführt wird, enthält die Showplan-Ausgabe, die von SET STATISTICS XML generiert wird, oder mithilfe der Option "Ist-Ausführungsplan einschließen" in SQL Server Management Studio nicht das RunTimeInformation Element für den Parallelism Operator. In set STATISTICS PROFILE output, the actual row counts and actual number of executes will display zeroes for the Parallelism operator. Wenn eine bedingung auftritt, bedeutet dies, dass der Operator nur während der Parallelism Abfragekompilierung und nicht im Laufzeitabfrageplan verwendet wurde. Beachten Sie, dass manchmal parallele Abfragepläne serial ausgeführt werden, wenn auf dem Server eine hohe gleichzeitige Last vorhanden ist. |
|
Parameter Table Scan |
Der Parameter Table Scan Operator überprüft eine Tabelle, die als Parameter in der aktuellen Abfrage fungiert. In der Regel wird dies für INSERT-Abfragen innerhalb einer gespeicherten Prozedur verwendet.
Parameter Table Scan ist ein logischer und physischer Operator. |
| Nichts | Teilaggregat |
Teilaggregat wird in parallelen Plänen verwendet. Sie wendet eine Aggregationsfunktion auf so viele Eingabezeilen wie möglich an, damit das Schreiben auf den Datenträger (auch als "Speicherüberlauf" bezeichnet) nicht notwendig wird.
Hash Match ist der einzige physische Operator (Iterator), der die Partitionsaggregation implementiert.
Partielles Aggregat ist ein logischer Operator. |
|
Population Query |
Der Population Query Operator füllt die Arbeitstabelle eines Cursors auf, wenn der Cursor geöffnet wird. |
|
Refresh Query |
Der Refresh Query Operator ruft aktuelle Daten für Zeilen im Abrufpuffer ab. |
|
Remote Delete |
Der Remote Delete Operator löscht die Eingabezeilen aus einem Remoteobjekt.
Remote Delete ist ein logischer und physischer Operator. |
|
Remote-Index-Scan | Der Remoteindexscan-Operator überprüft den in der Spalte "Argument" angegebenen Remoteindex. Die Remoteindexüberprüfung ist ein logischer und physischer Operator. |
|
Remoteindexsuche | Der Remoteindex Seek-Operator verwendet die Suchmöglichkeit eines Remoteindexobjekts zum Abrufen von Zeilen. Die Argument Spalte enthält den Namen des verwendeten Remoteindexes und des SEEK:()-Prädikats.
Die Remoteindexsuche ist ein logischer physischer Operator. |
|
Fernzugriffseinfügung | Der Operator "Remote Insert " fügt die Eingabezeilen in ein Remoteobjekt ein. Remote Insert ist ein logischer und physischer Operator. |
|
Remote Query |
Der Remote Query Operator sendet eine Abfrage an eine Remotequelle. Der Text der an den Remoteserver gesendeten Abfrage wird in der Argument Spalte angezeigt.
Remote Query ist ein logischer und physischer Operator. |
|
Remote Scan |
Der Remote Scan Operator scannt ein Remoteobjekt. Der Name des Remoteobjekts wird in der Argument Spalte angezeigt.
Remote Scan ist ein logischer und physischer Operator. |
|
Remote Update |
Der Remote Update Operator aktualisiert die Eingabezeilen in einem Remoteobjekt.
Remote Update ist ein logischer und physischer Operator. |
|
Datenströme neu partitionieren | Der Operator "Repartition Streams " verwendet mehrere Datenströme und erzeugt mehrere Datenströme von Datensätzen. Der Datensatzinhalt und das Format werden nicht geändert. Wenn der Abfrageoptimierer einen Bitmapfilter verwendet, wird die Anzahl der Zeilen im Ausgabedatenstrom reduziert. Jeder Datensatz aus einem Eingabedatenstrom wird in einen Ausgabedatenstrom eingefügt. Wenn dieser Operator in der Reihenfolge beibehalten wird, müssen alle Eingabedatenströme sortiert und mit mehreren sortierten Ausgabedatenströmen zusammengeführt werden. Wenn die Ausgabe partitioniert ist, enthält die Argument Spalte ein PARTITIONSSPALTEN:()-Prädikat und die Partitionierungsspalten. Wenn die Ausgabe sortiert ist, enthält die Argument Spalte ein ORDER BY:()-Prädikat und die sortierten Spalten.
Repartition Streams ist ein logischer Operator. Der Operator wird nur in parallelen Abfrageplänen verwendet. |
|
Result |
Der Result Operator ist die am Ende eines Abfrageplans zurückgegebenen Daten. Dies ist in der Regel das Stammelement eines Showplans.
Result ist ein Sprachelement. |
|
RID Lookup |
RID Lookup ist eine Lesezeichensuche auf einem Heap mithilfe eines angegebenen Zeilenbezeichners (RID). Die Argument Spalte enthält die Textmarkenbeschriftung, die verwendet wird, um die Zeile in der Tabelle nachzuschlagen, sowie den Namen der Tabelle, in der die Zeile nachgeschlagen wird.
RID Lookup wird immer von einer geschachtelten Schleifenverbindung begleitet.
RID Lookup ist ein physischer Operator. Weitere Informationen zu Lesezeichen-Nachschlagevorgängen finden Sie im MSDN SQL Server-Blog unter "Lesezeichensuche". |
| Nichts | Right Anti Semi Join |
Der Right Anti Semi Join Operator gibt jede Zeile aus der zweiten (unteren) Eingabe aus, wenn keine übereinstimmende Zeile in der ersten (oberen) Eingabe vorhanden ist. Eine übereinstimmende Zeile wird als Zeile definiert, die das Prädikat in der Argument Spalte erfüllt (wenn kein Prädikat vorhanden ist, ist jede Zeile eine übereinstimmende Zeile).
Right Anti Semi Join ist ein logischer Operator. |
| Nichts | Right Outer Join |
Der Right Outer Join Operator gibt jede Zeile zurück, die die Verknüpfung der zweiten (unteren) Eingabe mit jeder übereinstimmenden Zeile aus der ersten (oberen) Eingabe erfüllt. Außerdem werden alle Zeilen aus der zweiten Eingabe zurückgegeben, die keine übereinstimmenden Zeilen in der ersten Eingabe enthalten, die mit NULL verknüpft sind. Wenn in der Argument Spalte kein Join-Prädikat vorhanden ist, handelt es sich bei jeder Zeile um eine übereinstimmende Zeile.
Right Outer Join ist ein logischer Operator. |
| Nichts | Right Semi Join |
Der Right Semi Join Operator gibt jede Zeile aus der zweiten (unteren) Eingabe zurück, wenn eine übereinstimmende Zeile in der ersten (oberen) Eingabe vorhanden ist. Wenn in der Argument Spalte kein Join-Prädikat vorhanden ist, handelt es sich bei jeder Zeile um eine übereinstimmende Zeile.
Right Semi Join ist ein logischer Operator. |
|
Zeilenanzahl-Spool | Der Operator " Zeilenanzahl-Spool " überprüft die Eingabe, zählt, wie viele Zeilen vorhanden sind, und gibt dieselbe Anzahl von Zeilen ohne Daten zurück. Dieser Operator wird verwendet, wenn es wichtig ist, das Vorhandensein von Zeilen zu überprüfen, anstatt auf die in den Zeilen enthaltenen Daten. Wenn ein Nested Loops Operator z. B. einen linken Semi join-Vorgang ausführt und das Join-Prädikat auf innere Eingaben angewendet wird, kann ein Zeilenanzahlspool am oberen Rand der inneren Eingabe des Nested Loops Operators platziert werden. Anschließend kann der Nested Loops Operator bestimmen, wie viele Zeilen vom Zeilenanzahlsspool ausgegeben werden (da die tatsächlichen Daten von der inneren Seite nicht benötigt werden), um zu bestimmen, ob die äußere Zeile zurückgegeben werden soll.
Row Count Spool ist ein physischer Operator. |
|
Segment | Segment ist ein physischer und ein logischer Operator. Der Eingabesatz wird basierend auf dem Wert einer oder mehrerer Spalten in Segmente unterteilt. Diese Spalten werden als Argumente im Segmentoperator angezeigt. Der Operator gibt dann jeweils ein Segment aus. |
| Nichts | Segment Repartition |
In einem parallelen Abfrageplan gibt es manchmal konzeptionelle Bereiche von Iteratoren. Alle Iteratoren innerhalb eines solchen Bereichs können von parallelen Threads ausgeführt werden. Die Regionen selbst müssen seriell ausgeführt werden. Einige der Parallelism Iteratoren innerhalb einer einzelnen Region werden Branch Repartition genannt. Der Parallelism Iterator an der Grenze von zwei solchen Regionen wird Segment Repartition genannt.
Branch Repartition und Segment Repartition sind logische Operatoren. |
|
Sequence |
Der Sequence Operator steuert breite Updatepläne. Funktionell führt sie jede Eingabe in Sequenz (von oben nach unten) aus. Jede Eingabe ist in der Regel eine Aktualisierung eines anderen Objekts. Sie gibt nur die Zeilen zurück, die von der letzten (unteren) Eingabe stammen.
Sequence ist ein logischer und physischer Operator. |
|
Sequence Project |
Der Sequence Project Operator fügt Spalten hinzu, um Berechnungen über einen sortierten Satz durchzuführen. Der Eingabesatz wird basierend auf dem Wert einer oder mehrerer Spalten in Segmente unterteilt. Der Operator gibt dann jeweils ein Segment aus. Diese Spalten werden als Argumente im Sequence Project Operator angezeigt.
Sequence Project ist ein logischer und physischer Operator. |
|
Momentaufnahme | Der Snapshot-Operator erstellt einen Cursor, der keine Von anderen Personen vorgenommenen Änderungen anzeigt. |
|
Sort |
Der Sort Operator sortiert alle eingehenden Zeilen. Die Argument Spalte enthält entweder ein DISTINCT ORDER BY:()-Prädikat, wenn Duplikate von diesem Vorgang entfernt werden, oder ein ORDER BY:()-Prädikat mit einer durch Trennzeichen getrennten Liste der spalten, die sortiert werden. Die Spalten werden dem Wert ASC vorangestellt, wenn die Spalten in aufsteigender Reihenfolge sortiert werden, oder dem Wert DESC, wenn die Spalten in absteigender Reihenfolge sortiert werden.
Sort ist ein logischer und physischer Operator. |
|
Split |
Der Split Operator wird verwendet, um die Updateverarbeitung zu optimieren. Sie teilt jeden Aktualisierungsvorgang in einen Löschvorgang und einen Einfügevorgang auf.
Split ist ein logischer und physischer Operator. |
|
Spule | Der Spool-Operator speichert ein Zwischenabfrageergebnis in der tempdb Datenbank. |
|
Stream Aggregate |
Der Stream Aggregate Operator gruppiert Zeilen nach einer oder mehreren Spalten und berechnet dann einen oder mehrere Aggregatausdrücke, die von der Abfrage zurückgegeben werden. Die Ausgabe dieses Operators kann von späteren Operatoren in der Abfrage referenziert, an den Client zurückgegeben werden oder beides. Der Stream Aggregate Operator erfordert Eingaben, die von den Spalten innerhalb ihrer Gruppen sortiert werden. Der Optimierer verwendet vor diesem Operator einen Sort Operator, wenn die Daten aufgrund eines vorherigen Sort Operators oder aufgrund einer geordneten Indexsuche oder Abfrage noch nicht sortiert sind. In der SHOWPLAN_ALL-Anweisung oder dem grafischen Ausführungsplan in SQL Server Management Studio werden die Spalten im GROUP BY-Prädikat in der Argument Spalte aufgelistet, und die Aggregatausdrücke werden in der Spalte "Definierte Werte " aufgeführt.
Stream Aggregate ist ein physischer Operator. |
|
Schalter | Switch ist eine spezielle Art von Verkettungs-Iterator mit n-Eingaben . Jedem Switch-Operator ist ein Ausdruck zugeordnet. Je nach Rückgabewert des Ausdrucks (zwischen 0 und n-1) kopiert Switch den entsprechenden Eingabedatenstrom in den Ausgabedatenstrom. Eine Verwendung von Switch besteht darin, Abfragepläne mit schnellen Vorwärtscursorn mit bestimmten Operatoren wie dem TOP-Operator zu implementieren. Switch ist ein logischer und physischer Operator. |
" |
Table Delete |
Der Table Delete physische Operator löscht Zeilen aus der Tabelle, die in der Argument Spalte des Abfrageausführungsplans angegeben ist. |
|
Table Insert |
Der Table Insert Operator fügt Zeilen aus der Eingabe in die Tabelle ein, die in der Argument Spalte des Abfrageausführungsplans angegeben ist. Die Argument Spalte enthält auch ein SET:()-Prädikat, das den Wert angibt, auf den jede Spalte festgelegt ist. Wenn Table Insert keine untergeordneten Elemente zum Einfügen von Werten hat, wird die eingefügte Zeile direkt vom Einfügeoperator selbst übernommen.
Table Insert ist ein physischer Operator. |
|
Tabelle zusammenführen | Der Table Merge-Operator wendet einen Zusammenführungsdatenstrom auf einen Heap an. Der Operator löscht, aktualisiert oder fügt Zeilen in der tabelle ein, die in der Argument Spalte des Operators angegeben ist. Der tatsächliche Vorgang hängt vom Laufzeitwert der in der Argument Spalte des Operators angegebenen ACTION-Spalte ab.
Tabellenzusammenführung ist ein physischer Operator. |
|
Table Scan |
Der Table Scan Operator ruft alle Zeilen aus der Tabelle ab, die in der Argument Spalte des Abfrageausführungsplans angegeben ist. Wenn ein WHERE:()-Prädikat in der Argument Spalte angezeigt wird, werden nur die Zeilen zurückgegeben, die das Prädikat erfüllen.
Table Scan ist ein logischer und physischer Operator. |
|
Tabellenpuffer | Der Tabellenspooloperator überprüft die Eingabe und platziert eine Kopie jeder Zeile in einer ausgeblendeten Spooltabelle, die in der tempdb-Datenbank gespeichert ist und nur für die Lebensdauer der Abfrage vorhanden ist. Wenn der Operator zurückgespult wird (z. B. durch einen Nested Loops operator), aber keine Neubindung erforderlich ist, werden die zwischengespeicherten Daten verwendet, anstatt die Eingabe erneut zu scannen.
Der Tabellenspool ist ein physischer Operator. |
|
Table Update |
Der Table Update physische Operator aktualisiert Eingabezeilen in der Tabelle, die in der Argument Spalte des Abfrageausführungsplans angegeben ist. Das SET:()-Prädikat bestimmt den Wert jeder aktualisierten Spalte. Auf diese Werte kann in der SET-Klausel oder an anderer Stelle innerhalb dieses Operators sowie an anderer Stelle innerhalb dieser Abfrage verwiesen werden. |
|
Funktion mit Tabellenwerten | Der Operator "Table-valued Function " wertet eine Tabellenwertfunktion (entweder Transact-SQL oder CLR) aus und speichert die resultierenden Zeilen in der tempdb-Datenbank . Wenn die übergeordneten Iteratoren die Zeilen anfordern, gibt die "Table-valued Function " die Zeilen aus tempdb.Abfragen mit Aufrufen von Tabellenwertfunktionen generieren Abfragepläne mit dem Iterator "Table-valued Function ". Die Tabellenwertfunktion kann mit unterschiedlichen Parameterwerten ausgewertet werden: Die Tabellenwertfunktion XML Reader nimmt einen XML-BLOB als Parameter an und erzeugt ein Rowset, das XML-Knoten in der XML-Dokumentreihenfolge darstellt. Andere Eingabeparameter können XML-Knoten einschränken, die an eine Teilmenge des XML-Dokuments zurückgegeben werden. Tabelle-Wertige Funktion XML-Leser mit XPath-Filter ist eine spezielle Art von XML-Leser-Tabelle-Wertige Funktion, die die Ausgabe auf XML-Knoten beschränkt, die einem XPath-Ausdruck entsprechen. Die Tabellenwertfunktion ist ein logischer und physischer Operator. |
oben |
Nach oben | Der Operator "Top " überprüft die Eingabe und gibt nur die erste angegebene Anzahl oder prozent der Zeilen zurück, möglicherweise basierend auf einer Sortierreihenfolge. Die Argument Spalte kann eine Liste der Spalten enthalten, die auf Verknüpfungen überprüft werden. Bei Aktualisierungsplänen wird der Operator "Top " verwendet, um Zeilenanzahlsgrenzwerte zu erzwingen.
Top ist ein logischer und physischer Operator.
Top ist ein logischer und physischer Operator. |
| Nichts | Top N-Sortierung |
Die oberste N-Sortierung ähnelt dem Sort Iterator, mit der Ausnahme, dass nur die ersten N-Zeilen und nicht das gesamte Resultset benötigt werden. Für kleine Werte von N versucht das SQL Server-Abfrageausführungsmodul, den gesamten Sortiervorgang im Arbeitsspeicher auszuführen. Bei großen Werten von N greift das Abfrageausführungsmodul auf die generischere Sortiermethode zurück, nach der N kein Parameter ist. |
|
UDX |
Erweiterte Operatoren (UDX) implementieren eine von vielen XQuery- und XPath-Vorgängen in SQL Server. Alle UDX-Operatoren sind logische und physische Operatoren. Der erweiterte Operator (UDX) FOR XML wird verwendet, um die relationale Zeile zu serialisieren, die sie in eine XML-Darstellung in einer einzelnen BLOB-Spalte in einer einzelnen Ausgabezeile eingibt. Es handelt sich um einen geordneten vertraulichen XML-Aggregationsoperator.Der erweiterte Operator (UDX) XML SERIALIZER ist ein reihenfolgensensitiver XML-Aggregationsoperator. Sie gibt Zeilen ein, die XML-Knoten oder XQuery-Skalare in der XML-Dokumentreihenfolge darstellen und einen serialisierten XML-BLOB in einer einzelnen XML-Spalte in einer einzelnen Ausgabezeile erzeugen.Der erweiterte Operator (EXTENDED Operator, UDX) XML FRAGMENT SERIALIZER ist ein spezieller Typ, der für die Verarbeitung von XML SERIALIZER Eingabezeilen verwendet wird, die XML-Fragmente darstellen, die in die XQuery-Erweiterung zum Einfügen von Daten eingefügt werden.Der erweiterte Operator (UDX) XQUERY STRING wertet den XQuery-Zeichenfolgenwert von Eingabezeilen aus, die XML-Knoten darstellen. Es handelt sich um einen auf die Reihenfolge empfindlichen Zeichenfolgenaggregationsoperator. Es gibt eine Zeile mit Spalten aus, die den XQuery-Skalar darstellen, der den Zeichenfolgenwert der Eingabe enthält.Der erweiterte Operator (UDX) XQUERY LIST DECOMPOSER ist ein XQuery-Listentrennoperator. Für jede Eingabezeile, die einen XML-Knoten darstellt, erzeugt sie eine oder mehrere Zeilen, die XQuery-Skalar darstellen, die einen Listenelementwert enthalten, wenn die Eingabe vom XSD-Listentyp ist.Der erweiterte Operator (UDX) XQUERY DATA wertet die XQuery fn:data()-Funktion für Eingaben aus, die XML-Knoten darstellen. Es handelt sich um einen reihenfolgeempfindlichen Zeichenfolgenaggregationsoperator. Es gibt eine Zeile mit Spalten aus, die den XQuery-Skalar darstellen, der das Ergebnis von fn:data()enthält.Der erweiterte Operator XQUERY CONTAINS wertet die XQuery fn:contains()-Funktion für Eingaben aus, die XML-Knoten darstellen. Es handelt sich um einen reihenfolgeabhängigen Zeichenfolgenaggregationsoperator. Es gibt eine Zeile mit Spalten aus, die XQuery-Skalar darstellen, die das Ergebnis von fn:contains()enthalten.Der erweiterte Operator UPDATE XML NODE aktualisiert den XML-Knoten in der XQuery-Erweiterung zum Ersetzen der Datenänderungserweiterung in der Modify() -Methode für XML-Typ. |
| Nichts | Vereinigung | Der Union-Operator durchsucht mehrere Eingaben, gibt jede gescannte Zeile aus und entfernt Duplikate. Union ist ein logischer Operator. |
|
Update |
Der Update Operator aktualisiert jede Zeile aus der Eingabe im objekt, das in der Argument Spalte des Abfrageausführungsplans angegeben ist.
Update ist ein logischer Operator. Der physische Operator ist Table Update, , Index Updateoder Clustered Index Update. |
|
While |
Der While Operator implementiert die Transact-SQL während der Schleife.
While ist ein Sprachelement |
|
Window Spool |
Der Window Spool Operator erweitert jede Zeile in den Satz von Zeilen, die das zugeordnete Fenster darstellen. In einer Abfrage definiert die OVER-Klausel das Fenster innerhalb eines Abfrageergebnissatzes, und eine Fensterfunktion berechnet dann einen Wert für jede Zeile dieses Fensters.
Window Spool ist ein logischer und physischer Operator. |
)
()
)
"
oben