Referenz zu logischen und physischen Showplanoperatoren

Operatoren beschreiben, wie eine Abfrage oder eine DML-Anweisung (Data Manipulation Language) in SQL Server ausgeführt wird. Der Abfrageoptimierer verwendet Operatoren, um einen Abfrageplan für das in der Abfrage angegebene Ergebnis zu erstellen, oder zum Ausführen des in der DML-Anweisung angegebenen Vorgangs. Der Abfrageplan ist eine Struktur, die aus physischen Operatoren besteht. Sie können den Abfrageplan mit den SET SHOWPLAN-Anweisungen, den grafischen Ausführungsplanoptionen in SQL Server Management Studio, oder den SQL Server Profiler Showplan-Ereignisklassen anzeigen.

Operatoren werden als logische und physische Operatoren klassifiziert.

  • Logische Operatoren
    Logische Operatoren beschreiben den relationalen algebraischen Vorgang, der für die Anweisungsverarbeitung verwendet wird. Mit anderen Worten, logische Operatoren beschreiben konzeptionell den auszuführenden Vorgang.

  • Physische Operatoren
    Physische Operatoren implementieren den durch logische Operatoren beschriebenen Vorgang. Jeder physische Operator ist ein Objekt oder eine Routine, das bzw. die einen Vorgang ausführt. Einige Operatoren greifen z. B. auf Spalten oder Zeilen einer Tabelle, eines Index oder einer Sicht zu. Andere physische Operatoren führen andere Vorgänge aus, z. B. Berechnungen, Aggregationen, Datenintegritätsprüfungen oder Joins. Physischen Operatoren sind Kosten zugeordnet.

    Über die physischen Operatoren werden Daten initialisiert, aufgelistet und beendet. Der physische Operator kann insbesondere die folgenden drei Methodenaufrufe beantworten:

    • Init(): Mit der Init()-Methode wird ein physischer Operator initialisiert und dazu angewiesen, gegebenenfalls Datenstrukturen einzurichten. Der physische Operator kann mehrere Init()-Aufrufe empfangen; in der Regel empfängt er jedoch nur einen.

    • GetNext(): Mit der GetNext()-Methode wird ein Operator angewiesen, die erste oder nächste Datenzeile abzurufen. Der physische Operator kann null oder mehrere GetNext()-Aufrufe empfangen.

    • Close(): Mit der Close()-Methode wird der physische Operator dazu angewiesen, einige Cleanupvorgänge auszuführen und sich selbst zu beenden. 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 durch SET STATISTICS PROFILE ON oder SET STATISTICS XML ON erstellten Showplanausgabe angezeigt. Weitere Informationen zu diesen SET-Optionen finden Sie unter SET STATISTICS PROFILE (Transact-SQL) und SET STATISTICS XML (Transact-SQL).

    Die ActualRebinds- und ActualRewinds-Zähler, die in der Showplanausgabe angezeigt werden, beziehen sich auf die Anzahl der Aufrufe der Init()-Methode. ActualRebinds entspricht 1 und ActualRewinds entspricht 0, es sei denn, ein Operator befindet sich innerhalb eines Schleifenjoins. Wenn sich ein Operator innerhalb eines Schleifenjoins befindet, muss die Summe der erneuten Bindungen und Zurückspulvorgänge der Anzahl der verarbeiteten Vorgänge außerhalb des Joins entsprechen. Unter 'erneuter Bindung' wird verstanden, dass sich mindestens ein korrelierter Parameter des Joins geändert hat und daher das Innere des Joins neu ausgewertet werden muss. Unter 'Zurückspulvorgang' wird verstanden, dass sich keiner der korrelierten Parameter geändert hat und das vorherige innere Resultset daher wiederverwendet werden kann.

    ActualRebinds und ActualRewinds sind in der mithilfe von SET STATISTICS XML ON erstellten XML-Showplanausgabe vorhanden. 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 den Assert- und den Filter-Operator aufgefüllt werden, wenn das StartupExpression-Attribut auf TRUE festgelegt ist.

    Wenn ActualRebinds und ActualRewinds in einem XML-Showplan vorhanden sind, können sie mit EstimateRebinds und EstimateRewinds verglichen werden. Wenn sie nicht vorhanden sind, kann die geschätzte Zeilenanzahl (EstimateRows) mit der tatsächlichen Zeilenanzahl (ActualRows) verglichen werden. Beachten Sie, dass die tatsächliche grafische Showplanausgabe für tatsächliche erneute Bindungen und Zurückspulvorgänge Nullen anzeigt, wenn letztere nicht vorhanden sind.

    Ein entsprechender Zähler, ActualEndOfScans, ist verfügbar, wenn die Showplanausgabe mithilfe von SET STATISTICS XML ON erstellt wird. Wenn ein physischer Operator das Ende seines Datenstroms erreicht, wird dieser Zähler um 1 erhöht. Wenn ein physischer Operator das Ende seines Datenstroms erreicht, wird dieser Zähler um 1 erhöht. Wie bei erneuten Bindungen und Zurückspulvorgängen kann die Anzahl für das Scanende größer als 1 sein; aber nur, wenn sich der Operator innerhalb eines Schleifenjoins befindet. Die Anzahl für Scanende muss kleiner oder gleich der Summe der erneuten Bindungen und Zurückspulvorgänge sein.

Zuordnen von physischen und logischen Operatoren

Der Abfrageoptimierer erstellt einen Abfrageplan als Struktur, die aus logischen Operatoren besteht. Nach dem Erstellen des Abfrageplans wählt der Abfrageoptimierer für jeden logischen Operator den effizientesten physischen Operator aus. Der Abfrageoptimierer entscheidet auf Basis der Kosten, welcher physischer Operator einen logischen Operator implementieren soll.

Normalerweise kann ein logischer Vorgang von mehreren physischen Operatoren implementiert werden. Ein physischer Operator kann jedoch in seltenen Fällen mehrere logische Vorgänge implementieren.

Beschreibung der Operatoren

In diesem Abschnitt finden Sie Beschreibungen der logischen und physischen Operatoren.

Symbol für grafischen Ausführungsplan

Showplanoperator

Beschreibung

Kein

Aggregate

Mit dem Aggregate-Operator wird ein Ausdruck berechnet, der MIN, MAX, SUM, COUNT oder AVG enthält. Der Aggregate-Operator kann ein logischer oder physischer Operator sein.

Operator für arithmetische Ausdrücke (Symbol)

Arithmetic Expression

Der Arithmetic Expression-Operator berechnet einen neuen Wert anhand vorhandener Werte in einer Zeile. Arithmetic Expression wird in SQL Server 2012 nicht verwendet.

Assert-Operator (Symbol)

Assert

Der Assert-Operator überprüft eine Bedingung. Beispielsweise überprüft er die referenzielle Integrität, oder er 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. Wird der Ausdruck mit NULL ausgewertet, so wird die Zeile an den Assert-Operator übergeben, und die Ausführung der Abfrage wird fortgesetzt. Wird dieser Ausdruck zu einem Nicht-NULL-Wert ausgewertet, so wird der entsprechende Fehler ausgelöst. Der Assert-Operator ist ein physischer Operator.

Assign-Sprachelement (Symbol)

Assign

Der Assign-Operator weist einer Variablen den Wert eines Ausdrucks oder einer Konstanten zu. Assign ist ein Sprachelement.

Kein

Asnyc Concat

Der Asnyc Concat-Operator wird nur in Remoteabfragen (verteilten Abfragen) verwendet. Er weist n untergeordnete Knoten und einen übergeordneten Knoten auf. Gewöhnlich sind manche untergeordnete Knoten Remotecomputer, die an einer verteilten Abfrage beteiligt sind. Asnyc Concat gibt open()-Aufrufe für alle untergeordneten Knoten gleichzeitig aus und wendet dann auf jeden untergeordneten Knoten eine Bitmap an. Für jedes Bit, das 1 ist, sendet Async Concat auf Anfrage die Ausgabezeilen an den übergeordneten Knoten.

Bitmap-Operator (Symbol)

Bitmap

SQL Server verwendet den Bitmap-Operator, um das Filtern mithilfe einer Bitmap in parallelen Abfrageplänen zu implementieren. Durch das Filtern mithilfe einer Bitmap kann die Abfrageausführung beschleunigt werden, indem Zeilen mit Schlüsselwerten eliminiert werden, die keine Joindatensätze erstellen können, 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 Bereich der Operatorstruktur, um Zeilen aus einer zweiten Tabelle in einem anderen Bereich der Struktur zu filtern. Indem unnötige Zeilen bereits zu Beginn der Abfrage entfernt werden, müssen die nachfolgenden Operatoren weniger Zeilen verarbeiten, wodurch die Gesamtleistung der Abfrage zunimmt. Der Optimierer bestimmt, wann eine Bitmap für die Nutzung selektiv genug ist und in welchen Operatoren der Filter angewendet werden soll. Bitmap ist ein physischer Operator.

Bitmap-Operator (Symbol)

Bitmap Create

Der Bitmap Create-Operator wird in der Showplanausgabe dort angezeigt, wo Bitmaps erstellt werden. Bitmap Create ist ein logischer Operator.

Bookmark Lookup-Operator (Symbol)

Bookmark Lookup

Der Bookmark Lookup-Operator verwendet ein Lesezeichen (Zeilen-ID oder Gruppierungsschlüssel), um die zugehörige Zeile in der Tabelle oder im gruppierten Index nachzuschlagen. Die Argument-Spalte enthält das Lesezeichen, über das die Zeile in der Tabelle oder im gruppierten Index gesucht wird. Die Argument-Spalte enthält auch den Namen der Tabelle oder des gruppierten Indexes, in der die Zeile gesucht wird. Wenn die WITH PREFETCH-Klausel in der Argument-Spalte auftritt, hat der Abfrageprozessor ermittelt, dass Lesezeichen in der Tabelle oder im gruppierten Index optimalerweise mit asynchronem Vorauslesen (Read-Ahead) nachgeschlagen werden sollten.

Bookmark Lookup wird in SQL Server 2012 nicht verwendet. Clustered Index Seek und RID Lookup stellen hingegen Suchfunktionen für Lesezeichen bereit. Auch der Key Lookup-Operator stellt diese Funktionalität bereit.

Kein

Branch Repartition

Ein paralleler Abfrageplan kann mitunter logische Bereiche von Iteratoren enthalten. Alle Iteratoren innerhalb eines solchen Bereichs können durch parallele Threads ausgeführt werden. Die Bereiche selbst müssen seriell ausgeführt werden. Einige der Parallelism-Iteratoren innerhalb eines einzelnen Bereichs werden Branch Repartition genannt. Der Parallelism-Iterator an der Grenze zwischen zwei Bereichen wird Segment Repartition genannt. Branch Repartition und Segment Repartition sind logische Operatoren.

Kein

Broadcast

Broadcast weist einen untergeordneten Knoten und n übergeordnete Knoten auf. Broadcast sendet die Eingabezeilen bei Bedarf an mehrere Consumer. Jeder Consumer erhält alle Zeilen. Wenn beispielsweise alle Consumer sich auf der Erstellungsseite eines Hashjoins befinden, werden n Kopien der Hashtabellen erstellt.

Build Hash-Operator (Symbol)

Build Hash

Gibt die Erstellung einer Batchhashtabelle für einen speicheroptimierten xVelocity-columnstore-Index an.

Kein

Cache

Cache ist eine spezielle Version des Spool-Operators. Er speichert nur eine Datenzeile. Cache ist ein logischer Operator. Cache wird in SQL Server 2012 nicht verwendet.

Clustered Index Delete-Operator (Symbol)

Clustered Index Delete

Der Clustered Index Delete-Operator löscht Zeilen aus dem gruppierten Index, der in der Argument-Spalte des Abfrageausführungsplans angegeben ist. Wenn ein WHERE:()-Prädikat in der Argument-Spalte vorhanden ist, werden nur die Zeilen gelöscht, die das Prädikat erfüllen. Clustered Index Delete ist ein physischer Operator.

Clustered Index Insert-Operator (Symbol)

Clustered Index Insert

Der Clustered Index Insert-Showplanoperator fügt die Eingabezeilen in den gruppierten Index ein, der in der Argument-Spalte angegeben ist. Die Argument-Spalte enthält auch ein SET:()-Prädikat, das den für die einzelnen Spalten festgelegten Wert anzeigt. Wenn Clustered Index Insert keine untergeordneten Elemente für Eingabewerte enthält, wird die eingefügte Zeile aus dem Insert-Operator selbst übernommen. Clustered Index Insert ist ein physischer Operator.

Clustered Index Merge-Operator

Clustered Index Merge

Der Clustered Index Merge-Operator übernimmt einen Mergedatenstrom für einen gruppierten Index. Der Operator löscht oder aktualisiert Zeilen aus dem gruppierten Index, der in der Argument-Spalte des Operators angegeben ist, bzw. fügt Zeilen in diesen ein. Der tatsächlich ausgeführte Vorgang ist vom Laufzeitwert der in der Argument-Spalte des Operators angegebenen ACTION-Spalte abhängig. Clustered Index Merge ist ein physischer Operator.

Clustered Index Scan-Operator (Symbol)

Clustered Index Scan

Der Clustered Index Scan-Operator scannt den gruppierten Index, der in der Argument-Spalte 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 Argument-Spalte die ORDERED-Klausel enthält, hat der Abfrageprozessor angefordert, dass die Ausgabe der Zeilen in der Reihenfolge zurückgegeben wird, in der sie vom gruppierten Index sortiert wurden. Wurde die ORDERED-Klausel nicht angegeben, scannt das Speichermodul den Index optimal (wobei die Ausgabe nicht unbedingt sortiert ist). Clustered Index Scan ist ein logischer und physischer Operator.

Clustered Index Seek-Operator (Symbol)

Clustered Index Seek

Der Clustered Index Seek-Operator verwendet die Suchfunktionen der Indizes, um Zeilen aus einem gruppierten Index abzurufen. Die Argument-Spalte enthält den Namen des verwendeten gruppierten Indexes und das SEEK:()-Prädikat. Das Speichermodul verarbeitet mit diesem Index nur die Zeilen, die das SEEK:()-Prädikat erfüllen. Es kann auch ein WHERE:()-Prädikat einschließen, das das Speichermodul für alle Zeilen auswertet, die das SEEK:()-Prädikat erfüllen. Dies ist jedoch optional, und es werden keine Indizes für diesen Prozess verwendet.

Wenn die Argument-Spalte die ORDERED-Klausel enthält, hat der Abfrageprozessor ermittelt, dass die Zeilen in der Reihenfolge zurückgegeben werden müssen, in der sie vom gruppierten Index sortiert wurden. Wurde die ORDERED-Klausel nicht angegeben, durchsucht das Speichermodul den Index optimal (wobei die Ausgabe nicht unbedingt sortiert ist). Die Ausgabe in der ursprünglichen Reihenfolge kann weniger effizient sein als die unsortierte Ausgabe. Bei der Anzeige des LOOKUP-Schlüsselworts, wird ein Bookmark Lookup ausgeführt. In SQL Server 2008 und höheren Versionen stellt der Operator Key Lookup die Bookmark Lookup-Funktionalität bereit. Clustered Index Seek ist ein logischer und physischer Operator.

Clustered Index Update-Operator (Symbol)

Clustered Index Update

Der Clustered Index Update-Operator aktualisiert Eingabezeilen in dem gruppierten Index, der in der Argument-Spalte angegeben ist. Wenn ein WHERE:()-Prädikat vorhanden ist, werden nur die Zeilen aktualisiert, die dieses Prädikat erfüllen. Wenn ein SET:()-Prädikat vorhanden ist, wird jede aktualisierte Spalte auf diesen Wert festgelegt. Wenn ein DEFINE:()-Prädikat vorhanden ist, werden die durch diesen Operator definierten Werte aufgelistet. Auf diese Werte kann in der SET-Klausel oder an anderer Stelle in diesem Operator sowie in dieser Abfrage verwiesen werden. Clustered Index Update ist ein logischer und physischer Operator.

Collapse-Operator (Symbol)

Collapse

Der Collapse-Operator optimiert die Verarbeitung von Aktualisierungen. Eine Aktualisierung kann bei ihrer Ausführung mithilfe des Split-Operators in einen Lösch- und einen Einfügevorgang aufgeteilt werden. Die Argument-Spalte enthält eine GROUP BY:()-Klausel, die eine Liste von Schlüsselspalten angibt. Wenn der Abfrageprozessor benachbarte Zeilen erkennt, die dieselben Schlüsselwerte löschen und einfügen, werden diese separaten Vorgänge durch einen einzigen effektiveren Updatevorgang ersetzt. Collapse ist ein logischer und physischer Operator.

Columnstore-Indexscan

Columnstore Index Scan

Der Columnstore Index Scan-Operator scannt den columnstore-Index, der in der Argument-Spalte des Abfrageausführungsplans angegeben ist.

Compute Scalar-Operator (Symbol)

Compute Scalar

Der Compute Scalar-Operator wertet einen Ausdruck aus und erstellt einen berechneten skalaren Wert. Dieser kann an den Benutzer zurückgegeben und/oder an anderer Stelle in der Abfrage als Verweis verwendet werden. Ein Beispiel für beide Fälle ist ein Filterprädikat oder Joinprädikat. Compute Scalar ist sowohl logischer als auch physischer Operator.

In durch SET STATISTICS XML generierten Showplans enthaltene Compute Scalar-Operatoren enthalten eventuell nicht das RunTimeInformation-Element. In grafischen Showplans können Tatsächliche Zeilen, Tatsächlich erneuerte Bindungen und Tatsächliche Zurückspulvorgänge im Fenster Eigenschaften fehlen, wenn die Option Tatsächlichen Ausführungsplan einschließen in SQL Server Management Studio aktiviert wurde. Wenn diese Situation eintritt, bedeutet das, dass diese Operatoren zwar im kompilierten Abfrageplan verwendet wurden, ihre Arbeit jedoch von anderen Operatoren im Laufzeitabfrageplan verrichtet wurde. Beachten Sie außerdem, dass die Anzahl der Ausführungen in der von SET STATISTICS PROFILE generierten Showplanausgabe gleich der Summe der erneuten Bindungen und Zurückspulvorgänge in den von SET STATISTICS XML generierten Showplans ist.

Concatenation-Operator (Symbol)

Concatenation

Der Concatenation-Operator scannt mehrere Eingaben und gibt die gescannten Zeilen zurück. Concatenation wird im Allgemeinen verwendet, um das Transact-SQL-Konstrukt UNION ALL zu implementieren. Der physische Operator Concatenation verfügt über zwei oder mehr Eingaben und eine Ausgabe. Concatenation kopiert Zeilen aus dem ersten Eingabedatenstrom in den Ausgabedatenstrom und wiederholt diese Operation anschließend für jeden weiteren Eingabedatenstrom. Concatenation ist sowohl ein logischer als auch ein physischer Operator.

Constant Scan-Operator (Symbol)

Constant Scan

Mithilfe des Constant Scan-Operators wird mindestens eine konstante Zeile in eine Abfrage eingeführt. Ein Compute Scalar-Operator wird häufig nach einem Constant Scan verwendet, um einer Zeile, die durch den Constant Scan-Operator erstellt wurde, Spalten hinzuzufügen.

Convert-Sprachelement (Datenbankmodul – Symbol)

Convert

Der Convert-Operator wandelt einen skalaren Datentyp in einen anderen um. Convert ist ein Sprachelement.

Kein

Cross Join

Der Cross Join-Operator verknüpft jede Zeile der ersten (oberen) Eingabe mit jeder Zeile der zweiten (unteren) Eingabe. Cross Join ist ein logischer Operator.

Cursorsammelelement (Cursoroperatorsymbol)

catchall

Das Sammelsymbol wird angezeigt, wenn von der Logik, die grafische Showplans erzeugt, kein geeignetes Symbol für den Iterator gefunden werden kann. Das Sammelsymbol zeigt nicht notwendigerweise eine Fehlerbedingung an. Es stehen drei Sammelsymbole zur Verfügung: blau (für Iteratoren), orange (für Cursor) und grün (für Transact-SQL-Sprachelemente).

Kein

Cursor

Die logischen und physischen Cursor-Operatoren beschreiben, wie eine Abfrage oder Aktualisierung mit Cursoroperationen ausgeführt wird. Die physischen Operatoren beschreiben den Algorithmus, der für die physische Implementierung der Cursorverarbeitung verwendet wird, wie z. B. Verwenden eines keysetgesteuerten Cursors. Jeder Schritt bei der Ausführung eines Cursors benötigt einen physischen Operator. Die logischen Operatoren beschreiben eine Cursoreigenschaft, z. B. der Cursor ist schreibgeschützt.

Zu den logischen Operatoren zählen Asynchronous, Optimistic, Primary, Read Only, Scroll Locks sowie Secondary und Synchronous.

Zu den physischen Operatoren zählen Dynamic, Fetch Query, Keyset, Population Query, Refresh Query und Snapshot.

Declare-Sprachelement (Symbol)

Declare

Der Declare-Operator weist eine lokale Variable im Abfrageplan zu. Declare ist ein Sprachelement.

Delete-Operator (Datenbankmodul – Symbol)

Delete

Der logische Operator Delete löscht aus einem Objekt alle Zeilen, die das optionale Prädikat in der Argument-Spalte erfüllen.

Delete Scan-Operator (Symbol)

Deleted Scan

Der Deleted Scan-Operator scannt die deleted-Tabelle in einem Trigger.

Kein

Distinct

Mithilfe des Distinct-Operators werden Duplikate aus einem Rowset oder aus einer Sammlung von Werten entfernt. Distinct ist ein logischer Operator.

Kein

Distinct Sort

Der logische Operator Distinct Sort scannt die Eingabe, entfernt Duplikate und sortiert nach den Spalten, die im DISTINCT ORDER BY:()-Prädikat der Argument-Spalte angegeben sind. Distinct Sort ist ein logischer Operator.

Distribute Streams Parallelism-Operator (Symbol)

Distribute Streams

Der Distribute Streams-Operator wird nur in parallelen Abfrageplänen verwendet. Der Distribute Streams-Operator nimmt genau einen Eingabedatenstrom von Datensätzen an und erzeugt mehrere Ausgabedatenströme. Inhalt und Format der Datensätze werden nicht geändert. Jeder Datensatz aus dem Eingabedatenstrom wird in genau einem der Ausgabedatenströme angezeigt. Dieser Operator behält die relative Reihenfolge der Eingabedatensätze in den Ausgabedatenströmen bei. In der Regel wird mit einem Hashingverfahren festgelegt, zu welchem Ausgabedatenstrom ein bestimmter Eingabedatensatz gehört.

Wenn die Ausgabe partitioniert ist, enthält die Argument-Spalte ein PARTITION COLUMNS:()-Prädikat und die Partitionierungsspalten. Distribute Streams ist ein logischer Operator.

Dynamic-Cursoroperator (Symbol)

Dynamic

Der Dynamic-Operator verwendet einen Cursor, der alle von anderen vorgenommenen Änderungen wahrnimmt.

Spool-Operator (Symbol)

Eager Spool

Der Eager Spool-Operator verarbeitet die gesamte Eingabe und speichert jede Zeile in einem verborgenen temporären Objekt in der tempdb-Datenbank. Wenn der Operator zurückgesetzt wird (beispielsweise aufgrund eines Nested Loops-Operators), aber keine erneute Zuordnung erforderlich ist, werden die gespoolten Daten verwendet, anstatt die Eingabe erneut zu scannen. Wenn eine erneute Zuordnung erforderlich ist, werden die gespoolten Daten gelöscht, und das Spoolobjekt wird durch erneutes Scannen der (neu zugeordneten) Eingabe neu erstellt. Der Eager Spool-Operator erstellt seine Spooldatei unverzüglich: Wenn der übergeordnete Operator des Spoolvorgangs die erste Zeile anfordert, verarbeitet der Spool -Operator alle Zeilen aus dem Eingabeoperator und speichert sie im Spool. Eager Spool ist ein logischer Operator.

Fetch Query-Cursoroperator (Symbol)

Fetch Query

Der Fetch Query-Operator ruft Zeilen ab, wenn eine Abrufoperation für einen Cursor ausgegeben wird.

Filter-Operator (Datenbankmodul – Symbol)

Filter

Der Operator Filter scannt die Eingabe und gibt nur die Zeilen zurück, die den in der Argument-Spalte angezeigten Filterausdruck (Prädikat) erfüllen.

Kein

Flow Distinct

Der logische Operator Flow Distinct scannt die Eingabe und entfernt Duplikate. Während der Distinct-Operator zuerst die gesamte Eingabe verarbeitet und dann die Ausgabe erstellt, gibt der FlowDistinct-Operator die Eingabe zeilenweise zurück (ausgenommen sind Zeilenduplikate, da diese entfernt werden).

Kein

Full Outer Join

Der logische Full Outer Join-Operator gibt alle Zeilen zurück, die das JOIN-Prädikat aus der ersten (oberen) Eingabe, verknüpft mit jeder Zeile aus der zweiten (unteren) Eingabe, erfüllen. Er gibt außerdem die folgenden Zeilen zurück:

  • Zeilen aus der ersten Eingabe, für die in der zweiten Eingabe keine Übereinstimmung besteht.

  • Zeilen aus der zweiten Eingabe, für die in der ersten Eingabe keine Übereinstimmung besteht.

Eingaben, die keine übereinstimmenden Werte enthalten, werden als NULL-Wert zurückgegeben. Full Outer Join ist ein logischer Operator.

Gather Streams Parallelism-Operator (Symbol)

Gather Streams

Der Gather Streams-Operator wird nur in parallelen Abfrageplänen verwendet. Der Gather Streams-Operator verarbeitet mehrere Eingabedatenströme, fasst diese zusammen und erzeugt genau einen Ausgabedatenstrom von Datensätzen. Inhalt und Format der Datensätze werden nicht geändert. Wenn dieser Operator die Reihenfolge beibehalten soll, müssen alle Eingabedatenströme entsprechend geordnet vorliegen. Wenn die Ausgabe sortiert ist, enthält die Argument-Spalte ein ORDER BY:()-Prädikat und die Namen der zu sortierenden Spalten. Gather Streams ist ein logischer Operator.

Hash Match-Operator (Symbol)

Hash Match

Der Hash Match-Operator erzeugt eine Hashtabelle, indem er für jede Zeile der Erstellungseingabe einen Hashwert berechnet. Ein HASH:()-Prädikat mit einer Liste der Spalten, die zum Erstellen der Hashwerte verwendet werden, wird in der Argument-Spalte angezeigt. Anschließend wird, soweit möglich, für jede Einfügezeile ein Hashwert (mithilfe derselben Hashfunktion) berechnet und in der Hashtabelle nach Übereinstimmungen gesucht. Wenn ein RESIDUAL-Prädikat vorhanden ist (identifiziert durch RESIDUAL:() in der Argument-Spalte), müssen Zeilen auch dieses Prädikat erfüllen, um als übereinstimmend zu gelten. Das Verhalten des Operators hängt von dem auszuführenden logischen Vorgang ab:

  • Für jeden Join wird die erste (obere) Eingabe verwendet, um die Hashtabelle zu erstellen, und die zweite (untere) Eingabe zum Einfügen in die Hashtabelle. Die Ausgabeübereinstimmungen (oder Nichtübereinstimmungen) werden vom Jointyp bestimmt. Wenn mehrere Joins dieselbe Joinspalte verwenden, werden diese Vorgänge in einem Hashteam gruppiert.

  • Für die Operatoren Distinct oder Aggregate wird die Eingabe verwendet, um die Hashtabelle zu erstellen (wobei Duplikate entfernt und Aggregatausdrücke berechnet werden). Wenn die Hashtabelle erstellt ist, wird die Tabelle gescannt, und alle Einträge werden ausgegeben.

  • Für den Union-Operator wird die erste Eingabe verwendet, um die Hashtabelle zu erstellen (wobei Duplikate entfernt werden). Die zweite Eingabe (die keine Duplikate haben darf) wird zum Einfügen in die Hashtabelle verwendet, wobei alle nicht übereinstimmenden Zeilen zurückgegeben werden, anschließend wird die Hashtabelle gescannt, und alle Einträge werden zurückgegeben.

Hash Match ist ein physischer Operator.

If-Sprachelement (Symbol)

If

Der If-Operator führt eine bedingte Verarbeitung basierend auf einem Ausdruck aus. If ist ein Sprachelement.

Kein

Inner Join

Der logische Inner Join-Operator gibt alle Zeilen zurück, die die Verknüpfung der ersten (oberen) Eingabe mit der zweiten (unteren) Eingabe erfüllen.

Insert (Datenbankmodul – Operatorsymbol)

Insert

Der logische Operator Insert fügt alle Eingabezeilen in das Objekt ein, das in der Argument-Spalte angegeben ist. Der physische Operator ist entweder der Operator Table Insert, Index Insert oder Clustered Index Insert.

Inserted Scan-Operator (Symbol)

Inserted Scan

Der Inserted Scan-Operator scannt die inserted-Tabelle. Inserted Scan ist sowohl ein logischer als auch ein physischer Operator.

Intrinsic-Sprachelement (Symbol)

Intrinsic

Der Intrinsic-Operator ruft eine interne Transact-SQL-Funktion auf. Intrinsic ist ein Sprachelement.

Iteratorsammelelement (Operatorsymbol)

Iterator

Das Iterator-Sammelsymbol wird angezeigt, wenn von der Logik, die grafische Showplans erzeugt, kein geeignetes Symbol für den Iterator gefunden werden kann. Das Sammelsymbol zeigt nicht notwendigerweise eine Fehlerbedingung an. Es stehen drei Sammelsymbole zur Verfügung: blau (für Iteratoren), orange (für Cursor) und grün (für Transact-SQL-Sprachkonstrukte).

Bookmark Lookup-Operator (Symbol)

Key Lookup

Der Key Lookup-Operator stellt eine Lesezeichensuche für eine Tabelle mit einem gruppierten Index dar. Die Argument-Spalte enthält den Namen des gruppierten Indexes und den Gruppierungsschlüssel, der für die Suche nach der Zeile im gruppierten Index verwendet wird. Key Lookup wird stets von einem Nested Loops-Operator begleitet. Wenn die WITH PREFETCH-Klausel in der Argument-Spalte auftritt, wurde vom Abfrageprozessor ermittelt, dass Lesezeichen im gruppierten Index optimalerweise mit asynchronem Vorauslesen (Read-Ahead) nachgeschlagen werden sollten.

Durch die Verwendung eines Key Lookup-Operators in einem Abfrageplan wird angegeben, dass für die Abfrage eine Leistungsoptimierung von Vorteil sein könnte. Beispielsweise kann die Leistung durch Hinzufügen eines abdeckenden Indexes optimiert werden.

Keyset-Cursoroperator (Symbol)

Keyset

Der Keyset-Operator verwendet einen Cursor, für den Aktualisierungen, jedoch keine von anderen vorgenommenen Einfügungen, sichtbar sind.

Sprachsammelelement (Symbol)

Language Element

Das Language Element-Sammelsymbol wird angezeigt, wenn von der Logik, die grafische Showplans erzeugt, kein geeignetes Symbol für den Iterator gefunden werden kann. Das Sammelsymbol zeigt nicht notwendigerweise eine Fehlerbedingung an. Es stehen drei Sammelsymbole zur Verfügung: blau (für Iteratoren), orange (für Cursor) und grün (für Transact-SQL-Sprachkonstrukte).

Spool-Operator (Symbol)

Lazy Spool

Der logische Operator Lazy Spool speichert alle Zeilen aus der Eingabe in einem verborgenen temporären Objekt in der tempdb-Datenbank. Wenn der Operator zurückgesetzt wird (beispielsweise aufgrund eines Nested Loops-Operators), aber keine erneute Zuordnung erforderlich ist, werden die gespoolten Daten verwendet, anstatt die Eingabe erneut zu scannen. Wenn eine erneute Zuordnung erforderlich ist, werden die gespoolten Daten gelöscht, und das Spoolobjekt wird durch erneutes Scannen der (neu zugeordneten) Eingabe neu erstellt. Der Lazy Spool-Operator erstellt seine Spooldatei mit Verzögerung. Das bedeutet, dass der Spooloperator jedes Mal, wenn der übergeordnete Operator des Spoolvorgangs eine Zeile anfordert, eine Zeile aus seinem Eingabeoperator erhält und sie im Spool speichert, anstatt alle Zeilen gleichzeitig zu verarbeiten. Lazy Spool ist ein logischer Operator.

Kein

Left Anti Semi Join

Der Left Anti Semi Join-Operator gibt jede Zeile aus der ersten (oberen) Eingabe zurück, für die keine übereinstimmende Zeile in der zweiten (unteren) Eingabe vorhanden ist. Wenn kein Joinprädikat in der Argument-Spalte vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar. Left Anti Semi Join ist ein logischer Operator.

Kein

Left Outer Join

Der Left Outer Join-Operator gibt alle Zeilen zurück, die die Verknüpfung der ersten (oberen) Eingabe mit der zweiten (unteren) Eingabe erfüllen. Er gibt auch alle Zeilen aus der ersten Eingabe zurück, für die keine übereinstimmende Zeile in der zweiten Eingabe vorhanden ist. Die nicht übereinstimmenden Zeilen in der zweiten Eingabe werden als NULL-Werte zurückgegeben. Wenn kein Joinprädikat in der Argument-Spalte vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar. Left Outer Join ist ein logischer Operator.

Kein

Left Semi Join

Der Operator Left Semi Join gibt jede Zeile aus der ersten (oberen) Eingabe zurück, für die eine übereinstimmende Zeile in der zweiten (unteren) Eingabe vorhanden ist. Wenn kein Joinprädikat in der Argument-Spalte vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar. Left Semi Join ist ein logischer Operator.

Log Row Scan-Operator (Symbol)

Log Row Scan

Der Log Row Scan-Operator scannt das Transaktionsprotokoll. Log Row Scan ist ein logischer und physischer Operator.

Merge Interval-Operator (Symbol)

Merge Interval

Der Operator Merge Interval führt mehrere (möglicherweise überlappende) Intervalle zusammen, um minimale, nicht überlappende Intervalle zu erzeugen, die anschließend zum Suchen von Indexeinträgen verwendet werden. Dieser Operator erscheint in der Regel über einem oder mehreren Compute Scalar-Operatoren, die wiederum über Constant Scan-Operatoren erscheinen, welche die von diesem Operator zu mischenden Intervalle (dargestellt als Spalten in einer Zeile) aufbauen. Merge Interval ist ein logischer und physischer Operator.

Merge Join-Operator (Symbol)

Merge Join

Der Merge Join-Operator führt die logischen Vorgänge "innere Verknüpfung", "linke äußere Verknüpfung", "linke Semiverknüpfung", "linke Antisemiverknüpfung", "rechte äußere Verknüpfung", "rechte Semiverknüpfung", "rechte Antisemiverknüpfung" und "Vereinigung" aus.

In der Argument-Spalte enthält der Merge Join-Operator ein MERGE:()-Prädikat, wenn der Vorgang eine 1:n-Join ausführt, oder ein MANY-TO-MANY MERGE:()-Prädikat, wenn der Vorgang einen m:n-Join ausführt. Die Argument-Spalte schließt auch eine durch Trennzeichen getrennte Liste der Spalten ein, die bei der Ausführung des Vorgangs verwendet wurden. Der Merge Join-Operator benötigt zwei Eingaben, die nach den jeweiligen Spalten sortiert sind, möglicherweise durch Einfügen von expliziten Sortiervorgängen in den Abfrageplan. Ein Zusammenführungsjoin ist vor allem effizient, wenn kein expliziter Sortiervorgang erforderlich ist, beispielsweise wenn ein geeigneter B-Struktur-Index in der Datenbank vorhanden ist oder die Datenbank für mehrere Vorgänge, z. B. ein Zusammenführungsjoin und Gruppierung mit Rollup, verwendet werden kann. Bei Merge Join handelt es sich um einen physischen Operator.

Nested Loops-Operator (Symbol)

Nested Loops

Der Nested Loops-Operator führt die logischen Operationen Inner Join, Left Outer Join, Left Semi Join und Left Anti Semi Join aus. Nested Loops-Joins führen für jede Zeile der äußeren Tabelle eine Suche in der inneren Tabelle aus, in der Regel mithilfe eines Indexes. Der Abfrageprozessor legt auf der Grundlage der geschätzten Kosten fest, ob die äußere Eingabe sortiert werden soll, um die Treffsicherheit der Suchvorgänge in dem Index über die innere Eingabe zu verbessern. Alle Zeilen, die das (optionale) Prädikat in der Argument-Spalte erfüllen, werden auf der Grundlage der ausgeführten logischen Operation zurückgegeben. Nested Loops ist ein physischer Operator.

Nonclustered Index Delete-Operator (Symbol)

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.

Nonclustered Index Insert-Operator (Symbol)

Index Insert

Mithilfe des Index Insert-Operators werden Zeilen aus der Eingabe in den nicht gruppierten Index eingegeben, der in der Argument-Spalte angegeben ist. Die Argument-Spalte enthält auch ein SET:()-Prädikat, mit dem der Wert angegeben wird, auf den die einzelnen Spalten festgelegt sind. Index Insert ist ein physischer Operator.

Nonclustered Index Scan-Operator (Symbol)

Index Scan

Der Index Scan-Operator ruft alle Zeilen des nicht gruppierten Indexes ab, der in der Argument-Spalte angegeben ist. Wenn ein optionales WHERE:()-Prädikat in der Argument-Spalte vorhanden ist, werden nur die Zeilen zurückgegeben, die das Prädikat erfüllen. Index Scan ist ein logischer und physischer Operator.

Nonclustered Index Seek-Operator (Symbol)

Index Seek

Der Index Seek-Operator verwendet die Suchfunktionen der Indizes, um Zeilen aus einem nicht gruppierten Index abzurufen. Die Argument-Spalte enthält den Namen des verwendeten nicht gruppierten Indexes. Außerdem enthält sie auch das SEEK:()-Prädikat. Mit diesem Index werden vom Speichermodul nur die Zeilen verarbeitet, die das SEEK:()-Prädikat erfüllen. Optional kann ein WHERE:()-Prädikat enthalten sein, das vom Speichermodul für alle Zeilen ausgewertet wird, bei denen das SEEK:()-Prädikat erfüllt wird (es werden hierfür keine Indizes verwendet). Wenn die Argument-Spalte die ORDERED-Klausel enthält, hat der Abfrageprozessor ermittelt, dass die Zeilen in der Reihenfolge zurückgegeben werden müssen, in der sie vom nicht gruppierten Index sortiert wurden. Wurde die ORDERED-Klausel nicht angegeben, so durchsucht das Speichermodul den Index auf die optimale Art (wobei die Ausgabe nicht unbedingt sortiert ist). Die Ausgabe in der ursprünglichen Reihenfolge kann weniger effizient sein als die unsortierte Ausgabe. Index Seek ist ein logischer und physischer Operator.

Nonclustered Index Spool-Operator (Symbol)

Index Spool

Der physische Operator Index Spool enthält ein SEEK:()-Prädikat in der Argument-Spalte. Der physische Index Spool-Operator scannt die Eingabezeilen, platziert eine Kopie jeder Zeile in einer verborgenen Spooldatei (die in der tempdb-Datenbank gespeichert und nur für die Lebensdauer der Abfrage vorhanden ist) und erstellt einen nicht gruppierten Index für die Zeilen. Dies ermöglicht es Ihnen, mithilfe der Indexsuchfunktionen nur die Zeilen auszugeben, die das SEEK:()-Prädikat erfüllen. Wenn der Operator zurückgesetzt wird (beispielsweise aufgrund eines Nested Loops-Operators), aber keine erneute Zuordnung erforderlich ist, werden die gespoolten Daten verwendet, anstatt die Eingabe erneut zu scannen.

Nonclustered Index Update-Operator (Symbol)

Nonclustered Index Update

Der physische Operator Nonclustered Index Update aktualisiert Eingabezeilen in dem 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.

Online Index Insert-Operator (Symbol)

Online Index Insert

Der physische Operator Online Index Insert gibt an, dass ein Index online erstellt, geändert oder gelöscht wird. Die zugrunde liegenden Tabellendaten bleiben daher während des Indexvorgangs für Benutzer verfügbar.

Kein

Parallelism

Der Parallelism-Operator führt die logischen Operationen Distribute Streams, Gather Streams und Repartition Streams durch. Die Argument-Spalten können ein PARTITION COLUMNS:()-Prädikat mit einer durch Trennzeichen getrennten Liste der zu partitionierenden Spalten enthalten. Außerdem können die Argument-Spalten ein ORDER BY:()-Prädikat enthalten, das durch Auflisten der Spalten die Sortierreihenfolge bei der Partitionierung beibehält. Parallelism ist ein physischer Operator.

HinweisHinweis

Wenn eine Abfrage als parallele Abfrage kompiliert wurde, aber zur Laufzeit als serielle Abfrage ausgeführt wird, enthält die entweder mit SET STATISTICS XML oder mit der Option Tatsächlichen Ausführungsplan einschließen von SQL Server Management Studio generierte Showplanausgabe kein RunTimeInformation-Element für den Parallelism-Operator. In der SET STATISTICS PROFILE-Ausgabe wird für die tatsächliche Anzahl der Zeilen sowie die tatsächliche Anzahl der Ausführungen Null für den Parallelism-Operator angezeigt. Tritt eine der Bedingungen auf, bedeutet dies, dass der Parallelism-Operator nur während der Kompilierung der Abfrage, nicht aber im Laufzeitabfrageplan verwendet wurde. Beachten Sie, dass parallele Abfragepläne mitunter seriell ausgeführt werden, wenn der Server stark ausgelastet ist.

Parameter Table Scan-Operator (Symbol)

Parameter Table Scan

Der Parameter Table Scan-Operator scannt eine Tabelle, die als Parameter in der aktuellen Abfrage dient. In der Regel wird dieser Operator für INSERT-Abfragen in einer gespeicherten Prozedur verwendet. Parameter Table Scan ist ein logischer und physischer Operator.

Kein

Partial Aggregate

Partial Aggregate wird in parallelen Plänen verwendet. Hiermit wird eine Aggregatfunktion auf möglichst viele Eingabezeilen angewandt, damit das Schreiben auf den Datenträger (der so genannte "Überlauf") nicht erforderlich ist. Hash Match ist der einzige physische Operator (Iterator), der die Partitionsaggregation implementiert. Partial Aggregate ist ein logischer Operator.

Population Query-Cursoroperator (Symbol)

Population Query

Der Population Query-Operator füllt die Arbeitstabelle eines Cursors auf, wenn der Cursor geöffnet wird.

Refresh Query-Cursoroperator (Symbol)

Refresh Query

Der Refresh Query-Operator ruft aktuelle Daten für die Zeilen im Fetchpuffer ab.

Remote Delete-Operator (Symbol)

Remote Delete

Der Remote Delete-Operator löscht die Eingabezeilen in einem Remoteobjekt. Remote Delete ist ein logischer und physischer Operator.

Remote Index Seek-Showplanoperator

Remote Index Scan

Der Remote Index Scan-Operator durchsucht den in der Argument-Spalte angegebenen Remoteindex. Remote Index Scan ist ein logischer und physischer Operator.

Remote Index Seek-Showplanoperator

Remote Index Seek

Der Remote Index Seek-Operator verwendet die Suchmöglichkeiten eines Remoteindexobjekts, um Zeilen abzurufen. Die Argument-Spalte enthält den Namen des verwendeten Remoteindexes und das SEEK:()-Prädikat. Remote Index Seek ist ein logischer und physischer Operator.

Remote Insert-Operator (Symbol)

Remote Insert

Der Remote Insert-Operator fügt die Eingabezeilen in ein Remoteobjekt ein. Remote Insert ist ein logischer und physischer Operator.

Remote Query-Operator (Symbol)

Remote Query

Durch den Operator Remote Query wird eine Abfrage an eine Remotequelle übermittelt. Der Text der an den Remoteserver gesendeten Abfrage wird in der Argument-Spalte angezeigt. Remote Query ist ein logischer und physischer Operator.

Remote Scan-Operator (Symbol)

Remote Scan

Der Operator Remote Scan überprüft ein Remoteobjekt. Der Name des Remoteobjekts wird in der Argument-Spalte angezeigt. Remote Scan ist ein logischer und physischer Operator.

Remote Update-Operator (Symbol)

Remote Update

Der Remote Update-Operator aktualisiert die Eingabezeilen in einem Remoteobjekt. Remote Update ist ein logischer und physischer Operator.

Repartition Streams Parallelism-Operator (Symbol)

Repartition Streams

Der Repartition Streams-Operator verarbeitet und generiert mehrere Datenströme von Datensätzen. Inhalt und Format der Datensätze 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 einem Ausgabedatenstrom platziert. Wenn dieser Operator die Reihenfolge beibehalten soll, müssen alle Eingabedatenströme entsprechend geordnet vorliegen und in mehrere geordnete Ausgabedatenströme zusammengeführt werden. Wenn die Ausgabe partitioniert wurde, enthält die Argument-Spalte ein PARTITION COLUMNS:()-Prädikat sowie die Partitionierungsspalten. Wenn die Ausgabe sortiert wurde, 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-Sprachelement (Symbol)

Result

Der Result-Operator stellt die Daten dar, die am Ende eines Abfrageplans zurückgegeben werden. Dies ist normalerweise das Stammelement eines Showplans. Result ist ein Sprachelement.

RID Lookup-Operator (Symbol)

RID Lookup

RID Lookup ist ein Bookmark Lookup für einen Heap, der eine bereitgestellte Zeilen-ID (RID) verwendet. Die Argument-Spalte enthält die Lesezeichenbeschriftung, mit der die Zeile in der Tabelle nachgeschlagen wird, und den Namen der Tabelle, in der die Zeile nachgeschlagen wird. RID Lookup wird stets durch eine NESTED LOOP JOIN-Anweisung begleitet. RID Lookup ist ein physischer Operator. Weitere Informationen zu Bookmark Lookups finden Sie unter Bookmark Lookup im SQL Server-Blog von MSDN.

Kein

Right Anti Semi Join

Der logische Operator Right Anti Semi Join gibt alle Zeilen aus der zweiten (unteren) Eingabe aus, für die keine übereinstimmende Zeile in der ersten (oberen) Eingabe vorhanden ist. Eine Zeile ist als übereinstimmende Zeile definiert, wenn das Prädikat in der Argument-Spalte erfüllt wird (bei fehlendem Prädikat sind alle Zeilen übereinstimmende Zeilen). Right Anti Semi Join ist ein logischer Operator.

Kein

Right Outer Join

Der Right Outer Join-Operator gibt alle Zeilen zurück, die den Join der zweiten (unteren) Eingabe mit der ersten (oberen) Eingabe erfüllen. Er gibt auch alle Zeilen aus der zweiten Eingabe mit NULL-Werten zurück, für die keine übereinstimmende Zeile in der ersten Eingabe vorhanden ist. Wenn kein Joinprädikat in der Argument-Spalte vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar. Right Outer Join ist ein logischer Operator.

Kein

Right Semi Join

Der Right Semi Join-Operator gibt alle Zeilen aus der zweiten (unteren) Eingabe zurück, für die eine übereinstimmende Zeile in der ersten (oberen) Eingabe vorhanden ist. Wenn kein Joinprädikat in der Argument-Spalte vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar. Right Semi Join ist ein logischer Operator.

Row Count Spool-Operator (Symbol)

Row Count Spool

Der Row Count Spool-Operator scannt die Eingabe, zählt, wie viele Zeilen vorhanden sind, und gibt dieselbe Anzahl an leeren Zeilen zurück. Dieser Operator wird verwendet, wenn es darauf ankommt, die Existenz von Zeilen und nicht ihren Inhalt zu überprüfen. Wenn beispielsweise ein Nested Loops-Operator einen Left Semi Join-Vorgang ausführt, wobei das Joinprädikat auf die innere Eingabe angewendet wird, kann ein Row Count Spool-Operator ganz am Anfang der inneren Eingabe des Nested Loops-Operators platziert werden. Anschließend kann der Nested Loops-Operator bestimmen, wie viele Zeilen vom Row Count Spool-Operator ausgegeben wurden (die inneren Daten werden hierzu nicht benötigt), um zu ermitteln, ob die äußere Zeile zurückgegeben werden muss. Beim Row Count Spool-Operator handelt es sich um einen physischen Operator.

Segment-Operator (Symbol)

Segment

Segment ist ein physischer und logischer Operator. Dieser Operator teilt die Eingabeset basierend auf dem Wert von mindestens einer Spalte in Segmente auf. Diese Spalten werden als Argumente im Operator Segment angezeigt. Anschließend gibt der Operator ein Segment nach dem anderen aus.

Kein

Segment Repartition

Ein paralleler Abfrageplan kann mitunter logische Bereiche von Iteratoren enthalten. Alle Iteratoren innerhalb eines solchen Bereichs können durch parallele Threads ausgeführt werden. Die Bereiche selbst müssen seriell ausgeführt werden. Bestimmte Parallelism-Iteratoren innerhalb eines einzelnen Bereichs werden Branch Repartition genannt. Der Parallelism-Iterator an der Grenze zwischen zwei Bereichen wird Segment Repartition genannt. Sowohl Branch Repartition als auch Segment Repartition sind logische Operatoren.

Sequence-Operator (Symbol)

Sequence

Der Sequence-Operator steuert umfangreiche Aktualisierungspläne. Er führt die Eingaben sequenziell aus (von oben nach unten). Jede Eingabe stellt in der Regel ein Update eines anderen Objekts dar. Der Operator gibt nur die Zeilen zurück, die aus der letzten (unteren) Eingabe stammen. Sequence ist ein logischer und physischer Operator.

Sequence Project-Operator (Symbol)

Sequence Project

Der Sequence Project-Operator fügt Spalten hinzu, um für eine geordnete Menge Berechnungen auszuführen. Dieser Operator teilt die Eingabeset basierend auf dem Wert von mindestens einer Spalte in Segmente auf. Anschließend gibt der Operator ein Segment nach dem anderen aus. Diese Spalten werden im Sequence Project-Operator als Argumente angezeigt. Sequence Project ist ein logischer und physischer Operator.

Momentaufnahme-Cursoroperator (Symbol)

Snapshot

Mit dem Momentaufnahme-Operator wird ein Cursor erstellt, der von anderen vorgenommene Änderungen nicht wahrnimmt.

Sort-Operator (Symbol)

Sort

Der Sort-Operator sortiert alle eingehenden Zeilen. Die Argument-Spalte enthält entweder ein DISTINCT ORDER BY:()-Prädikat, wenn Duplikate aus dieser Operation entfernt werden sollen, oder sie enthält ein ORDER BY:()-Prädikat mit einer durch Trennzeichen getrennten Liste der zu sortierenden Spalten. Die Spalten werden mit dem Präfix ASC versehen, wenn sie in aufsteigender Reihenfolge sortiert werden, oder mit der Zeichenfolge DESC, wenn sie in absteigender Reihenfolge sortiert werden. Sort ist ein logischer und physischer Operator.

Split-Operator (Symbol)

Split

Der Split-Operator wird zum Optimieren der Aktualisierungsverarbeitung verwendet. Er teilt jeden Aktualisierungsvorgang in einen Lösch- und einen Einfügevorgang auf. Split ist ein logischer und physischer Operator.

Spool-Operator (Symbol)

Spool

Mit dem Spool-Operator wird ein Zwischenabfrageergebnis in dertempdb-Datenbank gespeichert.

Stream Aggregate-Operator (Symbol)

Stream Aggregate

Der Stream Aggregate-Operator gruppiert Zeilen nach einer oder mehreren Spalten und berechnet einen oder mehrere Aggregatausdrücke, die von der Abfrage zurückgegeben wurden. Auf die Ausgabe dieses Operators kann durch spätere Operatoren in der Abfrage verwiesen werden, die Ausgabe kann an den Client zurückgegeben werden oder beides. Für den Stream Aggregate-Operator ist es erforderlich, dass die Eingabe innerhalb der Gruppen nach den Spalten sortiert ist. Der Optimierer verwendet vor diesem Operator einen Sort-Operator, wenn die Daten nicht bereits durch einen vorherigen Sort-Operator oder durch einen geordneten Indexsuch- oder Scanvorgang sortiert wurden. In der SHOWPLAN_ALL-Anweisung oder im grafischen Ausführungsplan in SQL Server Management Studio sind die Spalten im GROUP BY-Prädikat in der Spalte Argument aufgelistet, und die Aggregatausdrücke sind in der Spalte Defined Values aufgelistet. Stream Aggregate ist ein physischer Operator.

Switch-Operator (Symbol)

Switch

Switch ist ein spezieller Verkettungsiterator, der über n Eingaben verfügt. Mit jedem Switch-Operator ist ein Ausdruck verbunden. Abhängig vom Rückgabewert des Ausdrucks (zwischen 0 und n-1) kopiert Switch den entsprechenden Eingabedatenstrom in den Ausgabedatenstrom. Eine Verwendungsmöglichkeit von Switch besteht in der Implementierung von Abfrageplänen, die schnelle Vorwärtscursor mit bestimmten Operatoren, z. B. dem TOP-Operator, enthalten. Switch ist sowohl ein logischer als auch ein physischer Operator.

Table Delete-Operator (Symbol)

Table Delete

Mit dem physischen Operator Table Delete werden Zeilen aus der in der Argument-Spalte angegebenen Tabelle des Abfrageausführungsplans gelöscht.

Table Insert-Operator (Symbol)

Table Insert

Durch den Operator Table Insert werden Eingabezeilen in die in der Argument-Spalte des Abfrageausführungsplans angegebene Tabelle eingefügt. Die Argument-Spalte enthält auch ein SET:()-Prädikat, mit dem der Wert angegeben wird, auf den die einzelnen Spalten festgelegt sind. Wenn Table Insert keine untergeordneten Elemente für Eingabewerte enthält, wird die eingefügte Zeile aus dem Insert-Operator selbst übernommen. Table Insert ist ein physischer Operator.

Table Merge-Operator

Table Merge

Der Table Merge-Operator wendet einen Mergedatenstrom auf einen Heap an. Der Operator löscht oder aktualisiert Zeilen in der Tabelle, die in der Argument-Spalte des Operators angegeben ist, bzw. fügt Zeilen in diese ein. Der tatsächlich ausgeführte Vorgang ist vom Laufzeitwert der in der Argument-Spalte des Operators angegebenen ACTION-Spalte abhängig. Table Merge ist ein physischer Operator.

Table Scan-Operator (Symbol)

Table Scan

Mit dem Operator Table Scan werden alle Zeilen aus der in der Argument-Spalte angegebenen Tabelle des Abfrageausführungsplans abgerufen. 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.

Table Spool-Operator (Symbol)

Table Spool

Der Table Spool-Operator scannt die Eingabe und platziert eine Kopie jeder Zeile in einer verborgenen Spooltabelle, die in der tempdb-Datenbank gespeichert und nur für die Dauer der Abfrage vorhanden ist. Wenn der Operator zurückgesetzt wird (beispielsweise aufgrund eines Nested Loops-Operators), aber keine erneute Zuordnung erforderlich ist, werden die gespoolten Daten verwendet, anstatt die Eingabe erneut zu scannen. Table Spool ist ein physischer Operator.

Table Update-Operator (Symbol)

Table Update

Mithilfe des physischen Table Update-Operators werden Eingabezeilen aktualisiert, die in der Argument-Spalte des Abfrageausführungsplans angegeben werden. Das SET:()-Prädikat bestimmt den Wert jeder aktualisierten Spalte. Auf diese Werte kann in der SET-Klausel oder an anderer Stelle in diesem Operator sowie an anderer Stelle dieser Abfrage verwiesen werden.

Tabellenwertfunktion-Operator (Symbol)

Table-valued Function

Mit dem Operator Tabellenwertfunktion wird eine Tabellenwertfunktion ausgewertet (Transact-SQL oder CLR), und die Ergebniszeilen werden in der tempdb-Datenbank gespeichert. Wenn die übergeordneten Iteratoren die Zeilen anfordern, gibt die Tabellenwertfunktion die Zeilen aus tempdb zurück.

Abfragen mit Aufrufen von Tabellenwertfunktionen generieren Abfragepläne mit dem Tabellenwertfunktion-Iterator. Die Tabellenwertfunktion kann mit verschiedenen Parameterwerten analysiert werden:

  • Der Tabellenwertfunktion-XML-Leser gibt einen XML-BLOB als Parameter ein und erstellt ein Rowset, das XML-Knoten in der XML-Dokumentreihenfolge darstellt. Andere Eingabeparameter können die zurückgegebenen XML-Knoten auf eine Teilmenge von XML-Dokumenten einschränken.

  • Der Tabellenwertfunktion-XML-Leser mit XPath-Filter ist ein spezieller Typ von Tabellenwertfunktion-XML-Leser, der die Ausgabe auf XML-Knoten einschränkt, die einen XPath-Ausdruck erfüllen.

Die Tabellenwertfunktion ist sowohl ein logischer als auch ein physischer Operator.

Top-Operator (Symbol)

Top

Der Top-Operator scannt die Eingabe und gibt nur die angegebene Anzahl bzw. den angegebenen Prozentsatz von Zeilen zurück, meist basierend auf einer Sortierreihenfolge. Die Argument-Spalte kann eine Liste der Spalten enthalten, die auf Verbindungen überprüft werden. In Updateplänen wird der Top-Operator verwendet, um die Einschränkung der Zeilenanzahl zu erzwingen. Top ist sowohl logischer als auch physischer Operator. Top ist sowohl logischer als auch physischer Operator.

Kein

Top N Sort

Top N Sort ähnelt dem Sort-Iterator. Es werden allerdings nur die ersten N Spalten benötigt und nicht das gesamte Resultset. Bei kleinen Werten für N wird vom SQL Server-Abfrageausführungsmodul versucht, den gesamten Sortiervorgang im Arbeitsspeicher auszuführen. Bei großen Werten für N greift das Abfrageausführungsmodul auf die generischere Methode der Sortierung zurück, für die N kein Parameter ist.

Erweiterter Operator (UDX – Symbol)

UDX

Erweiterte Operatoren (UDX) implementieren einen von vielen XQuery- und XPath-Vorgängen in SQL Server. Alle UDX-Operatoren sind sowohl logische als auch physische Operatoren.

Mit dem erweiterten Operator (UDX) FOR XML wird das relationale Rowset serialisiert, das in die XML-Darstellung einer einzelnen BLOB-Spalte in einer einzigen Ausgabezeile eingegeben wird. Bei diesem XML-Aggregationsoperator wird die Reihenfolge berücksichtigt.

Der erweiterte Operator (UDX) XML SERIALIZER ist ein XML-Aggregationsoperator, bei dem die Reihenfolge berücksichtigt wird. Er gibt Zeilen ein, die XML-Knoten oder XQuery-Skalarwerte in der XML-Dokumentreihenfolge darstellen, und erstellt eine serialisierte XML-BLOB-Spalte in einer einzelnen XML-Spalte in einer einzigen Ausgabezeile.

Der erweiterte Operator (UDX) XML FRAGMENT SERIALIZER ist eine Sonderform von XML SERIALIZER, womit Eingabezeilen verarbeitet werden, die XML-Fragmente darstellen, die in der XQuery-Erweiterung zum Ändern von Einfügungsdaten eingefügt werden.

Der erweiterte Operator (UDX) XQUERY STRING wertet den XQuery-Zeichenfolgenwert von Eingabezeilen aus, die XML-Knoten darstellen. Bei diesem Zeichenfolgen-Aggregationsoperator wird die Reihenfolge berücksichtigt. Er gibt eine Zeile mit Spalten zurück, die den XQuery-Skalarwert darstellt, der den Zeichenfolgenwert der Eingabe enthält.

Der erweiterte Operator (UDX) XQUERY LIST DECOMPOSER ist ein XQuery-Listendekompositionsoperator. Für jede Eingabezeile, die einen XML-Knoten darstellt, erstellt dieser Operator mindestens eine Zeile, die einen XQuery-Skalarwert mit einem Listenelementwert darstellt, falls die Eingabe vom XSD-Listentyp ist.

Der erweiterte Operator (UDX) XQUERY DATA wertet die XQuery-Funktion fn:data() in Eingabezeilen aus, die XML-Knoten darstellen. Bei diesem Zeichenfolgen-Aggregationsoperator wird die Reihenfolge berücksichtigt. Er gibt eine Zeile mit Spalten zurück, die den XQuery-Skalarwert darstellt, der das Ergebnis von fn:data() enthält.

Der erweiterte Operator XQUERY CONTAINS wertet die XQuery-Funktion fn:contains() in Eingabezeilen aus, die XML-Knoten darstellen. Bei diesem Zeichenfolgen-Aggregationsoperator wird die Reihenfolge berücksichtigt. Er gibt eine Zeile mit Spalten zurück, die den XQuery-Skalarwert darstellt, der das Ergebnis von fn:contains() enthält.

Der erweiterte Operator UPDATE XML NODE aktualisiert XML-Knoten in der XQuery-Erweiterung zum Ändern von Ersetzungsdaten in der modify()-Methode vom XML-Typ.

Kein

Union

Der Union-Operator scannt mehrere Eingaben und gibt alle gescannten Zeilen aus, wobei Duplikate entfernt werden. Union ist ein logischer Operator.

Update (Datenbankmodul – Operatorsymbol)

Update

Mithilfe des Update-Operators wird jede Zeile mit der entsprechenden Eingabe in das Objekt aktualisiert, das in der Argument-Spalte des Abfrageausführungsplans angegeben ist. Update ist ein logischer Operator. Der physische Operator ist Table Update, Index Update oder Clustered Index Update.

While-Sprachelement (Symbol)

While

Der While-Operator implementiert die WHILE-Schleife von Transact-SQL. While ist ein Sprachelement.

Table Spool-Operator (Symbol)

Window Spool

Der Window Spool-Operator erweitert jede Zeile in den Satz von Zeilen, die das ihm zugeordnete Fenster darstellen. In einer Abfrage definiert die OVER-Klausel das Fenster innerhalb eines Abfrageresultsets, und eine Fensterfunktion berechnet dann einen Wert für jede Zeile im Fenster. Window Spool ist ein logischer und physischer Operator.