Referenz für logische und physische Showplanoperatoren

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

Operatoren beschreiben, wie die SQL Server-Datenbank-Engine eine Abfrage ausführt. Der Abfrageoptimierer verwendet Operatoren, um einen Abfrageplan zu erstellen, um das Ergebnis zu erstellen oder den in der Abfrage angegebenen Vorgang auszuführen. Der Abfrageplan ist eine Struktur, die aus physischen Operatoren besteht. Der äußerst linke Operator ist der Stamm, der die gesamte Ausführung steuert. Bei einer SELECT Anweisung gibt der Stamm in der Regel ein Ergebnis-Set an den Client zurück. Bei Datenänderungsanweisungen (INSERT, UPDATE, DELETE, MERGE) oder Anweisungen wie SELECT...INTO, steuert das Stammelement die Änderung und gibt möglicherweise keine Zeilen zurück. Operatoren ohne Eingaben, ganz rechts im Baum, sind Blattknoten, die in der Regel Daten aus Speichermedien lesen. Zwischenoperatoren transformieren, filtern oder verknüpfen Daten, während sie von rechts nach links durch den Plan fließen.

Sie können den Abfrageplan mit den SET SHOWPLAN - Anweisungen, den grafischen Ausführungsplanoptionen in SQL Server Management Studio oder den Showplan-Ereignissen der erweiterten Ereignisse anzeigen.

Operatortypen

Operatoren werden als logische und physische Operatoren klassifiziert.

Logische Operatoren

Logische Operatoren beschreiben den relationalen algebraischen Vorgang, der zum Verarbeiten einer Abfrage 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 Ansicht zu. Andere physische Operatoren führen Vorgänge aus, z. B. Berechnungen, Aggregationen, Datenintegritätsprüfungen oder Joins. Physische Operatoren haben Kosten, die mit ihnen verbunden sind.

Bei den physischen Operatoren werden Daten initialisiert, gesammelt und abgeschlossen. Der physische Operator kann insbesondere die folgenden drei Methodenaufrufe beantworten:

  • Open(): Mit der Methode Open() wird ein physischer Operator initialisiert und dazu angewiesen, erforderliche Datenstrukturen einzurichten. Während der physische Betreiber möglicherweise viele Open()-Anrufe empfängt, empfängt er in der Regel nur einen.

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

  • Close(): Mit der Methode Close() wird der physische Operator dazu angewiesen, einige Cleanupvorgänge auszuführen und sich selbst zu beenden. Ein physischer Telefonieanbieter empfängt nur einen Close()-Anruf, aber ein Close()-Anruf wird nicht immer garantiert.

Die GetRow() Methode gibt eine Datenzeile zurück, und die Anzahl der Aufrufe wird als ActualRows in der Showplanausgabe angezeigt, die vom grafischen und XML-Showplan erzeugt wird. Weitere Informationen zu diesen SET Optionen finden Sie unter SET STATISTICS PROFILE and SET STATISTICS XML.

Sprachelemente

Einige Operatoren in einem Abfrageplan stellen Transact-SQL language-Elemente anstelle relationaler Vorgänge dar. Dazu gehören Konstrukte wie variable Zuordnung, Typkonvertierung und Steuerungsfluss (IF/WHILE). Sprachelemente werden nicht als logische oder physische Operatoren klassifiziert.

Neubindungen, Rückspulen und Ende der Scans

Die folgenden Zähler werden in der Showplanausgabe angezeigt und helfen Ihnen zu verstehen, wie oft ein Operator erneut ausgeführt wird.

Die ActualRebinds- und ActualRewinds-Zähler, die in der Showplanausgabe angezeigt werden, beziehen sich auf die Anzahl der Aufrufe der Open()-Methode. Es sei denn, ein Operator befindet sich auf der inneren Seite eines geschachtelten Schleifenjoins, entspricht ActualRebinds 1 und ActualRewinds 0. Wenn sich ein Operator auf der inneren Seite eines Schleifenjoins befindet, muss die Gesamtzahl der Rebinds und Zurückspulungen der Anzahl der verarbeiteten Zeilen auf der äußeren Seite des Joins entsprechen. Unter "Neubindung" wird verstanden, dass sich mindestens einer der korrelierten Parameter des Joins geändert hat und daher die innere Seite neu ausgewertet werden muss. Unter „Zurückspulen“ versteht man, dass sich keiner der korrelierten Parameter geändert hat und das vorherige innere Resultset wiederverwendet werden kann.

ActualRebinds und ActualRewinds sind in der XML-Showplan-Ausgabe vorhanden, die durch die Verwendung von SET STATISTICS XML ON und dem grafischen Showplan erstellt wird. Sie werden für Operatoren wie Index-Spool, Remoteabfrage, Zeilenanzahl-Spool, Sortier-, Tabellen-Spool- und Tabellenwertfunktion aufgefüllt. ActualRebinds und ActualRewinds können auch für Operatoren wie Assert und Filter ausgefüllt werden, wenn StartupExpression-Attribut auf TRUE eingestellt ist.

Wenn ActualRebinds und ActualRewinds in einem XML-Showplan vorhanden sind, können sie mit EstimateRebinds und EstimateRewindsverglichen werden. Wenn sie nicht vorhanden sind, kann die geschätzte Zeilenanzahl (EstimateRows) mit der tatsächlichen Zeilenanzahl (ActualRows) verglichen werden. Die aktuelle grafische Showplanausgabe zeigt Nullen für die aktuellen Bindungen und die aktuellen Zurückspulungvorgänge an, wenn sie nicht vorhanden sind.

Ein verwandter Zähler, ActualEndOfScans, ist im XML- und grafischen Showplan verfügbar. Wenn ein physischer Operator das Ende seines Datenstroms erreicht, wird dieser Zähler um 1 erhöht. Ein physischer Operator kann das Ende seines Datenstroms null-, ein- oder mehrmals erreichen. Wie bei erneuten Bindungen und Zurückspulvorgängen kann die Anzahl der Scanenden größer als 1 sein; aber nur, wenn sich der Operator innerhalb eines Schleifenjoins befindet. Die Anzahl für Scanenden muss kleiner oder gleich der Summe der Neubindungen und Rückspulungen sein.

Wie der Abfrageoptimierer logische und physische Operatoren zuordnet

Der Abfrageoptimierer erstellt einen Abfrageplan als Baum, der aus logischen Operatoren besteht. Nachdem der Abfrageoptimierer den Plan erstellt hat, wählt er einen physischen Operator für jeden logischen Operator aus. Der Abfrageoptimierer verwendet einen kostenbasierten Ansatz , um zu bestimmen, welcher physische Operator einen logischen Operator implementiert.

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.

Batch-Modus-Ausführung

Die Batchmodusausführung ist eine Methode zur Abfrageverarbeitung, die zum gleichzeitigen Abfragen mehrerer Zeilen (d. h. eines Batchs) verwendet wird und nicht eine Zeile nach der anderen. Die Batchmodusverarbeitung verwendet Algorithmen, die für Mehrkern-CPUs und erhöhten Arbeitsspeicherdurchsatz bei moderner Hardware optimiert sind. Der Batchmodus kann von einer Reihe von Operatoren sowohl für Rowstore- als auch für Columnstore-Objekte verwendet werden. Weitere Informationen finden Sie unter Handbuch zur Architektur der Abfrageverarbeitung.

So lesen Sie einen Ausführungsplan

Im grafischen Ausführungsplan zeigen Pfeile von rechts nach links, die den Datenfluss darstellen. Zur Laufzeit funktioniert dies in entgegengesetzter Richtung: Operatoren sind pull-basiert und arbeiten nur, wenn Daten angefordert werden.

Der Stammoperator ruft GetRow() auf seine untergeordneten Elemente auf, die wiederum ihre eigenen untergeordneten Elemente aufrufen, bis ein Blattknoten eine Zeile aus dem Speicherplatz liest und sie in der Kette nach oben zurückgibt. Ein Clustered-Index-Scan in Verbindung mit einem Top-Operator durchsucht z. B. nicht die gesamte Tabelle. Der Scan wird beendet, sobald oben genügend Zeilen vorhanden sind. Im Batchmodus gibt jeder Aufruf eine Reihe von Zeilen anstelle einer einzelnen Zeile zurück. Beide Leserichtungen sind nützlich: Von rechts nach links wird angezeigt, welche Daten die einzelnen Operatoren eingeben, während von links nach rechts angezeigt wird, welcher Operator die Arbeit steuert.

Beschreibung der Operatoren

In diesem Abschnitt finden Sie Beschreibungen der logischen und physischen Operatoren. Sie können die Eigenschaften von Abfrageplänen und Operatoren mithilfe des Eigenschaftenbereichs in der Abfrageplanansicht von SQL Server Management Studio (SSMS) anzeigen.

Tipp

Wenn ein symbol für einen grafischen Ausführungsplan einen gelben Kreis mit zwei Pfeilen von rechts nach links aufweist, bedeutet dies, dass der Operator parallel ausgeführt wird. Weitere Informationen zur Parallelität finden Sie im Handbuch zur Thread- und Taskarchitektur.

Symbol Showplanoperator Beschreibung
Adaptiver Join Mit dem Adaptive Join-Operator können Sie die Wahl zwischen einer Hash-Join-Methode und einer Nested Loops Join-Methode verschieben, bis die erste Eingabe gescannt wurde.

Adaptive Join-Operator ist ein physischer Operator. Weitere Informationen finden Sie unter Grundlegendes zu adaptiven Joins.
Aggregat Der Aggregatoperator berechnet Ausdrücke, die eine oder mehrere Aggregatfunktionen enthalten.

Aggregat ist ein logischer Operator. Sie kann vom Operator Stream Aggregate, Hash Match, Window Aggregate oder UserDefinedAggregate (CLR) implementiert werden.
Arithmetischer Ausdruck Der Arithmetic Expression -Operator berechnet einen neuen Wert anhand vorhandener Werte in einer Zeile. Arithmetischer Ausdruck wird in neueren Versionen von SQL Server nicht verwendet.
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 im Eigenschaften-Bereich 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.

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

Assign ist ein Sprachelement.
Keine Asynchrone Verkettung Der Async Concat-Operator wird nur in Remoteabfragen (verteilten Abfragen) verwendet. Es hat n Kindknoten und einen Elternknoten. In der Regel sind einige untergeordnete Computer entfernte Computer, die an einer verteilten Abfrage beteiligt sind. Async Concat gibt Open()-Aufrufe für alle untergeordneten Elemente gleichzeitig aus und wendet dann auf jedes untergeordnete Element ein Bitmap an. Für jedes Bit, das 1 ist, sendet Async Concat bei Bedarf die Ausgabezeilen an den übergeordneten Knoten.

Async Concat ist ein physischer Operator.
Erstellung einer Batch-Hashtabelle Der Batch-Hash-Tabellen-Build-Operator erstellt eine Batch-Hash-Tabelle für einen speicheroptimierten Columnstore-Index.

Gilt nur für: SQL Server 2012 (11.x).
Bitmap SQL Server verwendet den Bitmap-Operator, um das Filtern mithilfe einer Bitmap in parallelen Abfrageplänen zu implementieren. Durch die Bitmapfilterung wird die Abfrageverarbeitung beschleunigt, indem Zeilen mit Schlüsselwerten, die keine Verknüpfungsdatensätze erzeugen können, beseitigt werden, bevor Zeilen durch einen anderen Operator wie z. B. den Parallelismus-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. Durch das Entfernen unnötiger Zeilen zu einem frühen Zeitpunkt in der Abfrage müssen nachfolgende Operatoren weniger Zeilen verarbeiten, wodurch eine Steigerung der Gesamtleistung der Abfrage erzielt werden kann. Der Optimierer bestimmt, wann eine Bitmap eine ausreichende Selektivität aufweist, damit sie verwendet werden kann, und in welchen Operatoren der Filter angewendet wird.

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

Bitmap Create ist ein logischer Operator.
Keine Branch Repartition Ein paralleler Abfrageplan kann mitunter konzeptionelle Bereiche von Iteratoren enthalten. Alle Iteratoren innerhalb eines solchen Bereichs können in parallelen Threads ausgeführt werden. Die Regionen selbst müssen seriell laufen. Bestimmte Parallelism -Iteratoren innerhalb eines einzelnen Bereichs werden Branch Repartitiongenannt. Der Parallelism -Iterator an der Grenze zwischen zwei Bereichen wird Segment Repartitiongenannt.

SowohlBranch Repartition als auch Segment Repartition sind logische Operatoren.
Broadcast Broadcast weist einen Kindknoten und n übergeordnete Knoten auf. Broadcast sendet die Eingabezeilen bei Bedarf an mehrere Consumer. Jeder Verbraucher erhält alle Zeilen. Wenn z. B. alle Consumer sich auf der Erstellungsseite eines Hashjoins befinden, werden n Kopien der Hashtabellen erstellt.

Broadcast ist ein logischer Operator.
Gruppierter Index löschen Der Operator Gruppierten Index löschen löscht Zeilen aus dem in der Objekteigenschaft angegebenen gruppierten Index, der im Eigenschaftenbereich der grafischen und XML-Showplans aufgeführt ist. Wenn ein SeekPredicate oder Prädikat vorhanden ist, werden nur die Zeilen gelöscht, die das Prädikat erfüllen.

Hinweis: Die Object-Eigenschaft kann zusätzliche nicht gruppierte Indizes auflisten, die der Operator gleichzeitig mit dem gruppierten Index ändert.

Clustered Index Delete ist ein physischer Operator.
Gruppierter Index einfügen Der Operator Clustered Index Insert fügt Zeilen aus seiner Eingabe in den gruppierten Index ein, der in der Eigenschaft Objekt angegeben ist, die im Bereich Eigenschaften der grafischen und XML-Anzeigepläne aufgeführt ist. Der XML-Showplan enthält SetPredicate- und ColumnReference-Eigenschaften, die verwendet werden können, um den Wert zu bestimmen, auf den jede Spalte festgelegt ist. Wenn Clustered Index Insert keine untergeordneten Elemente für Eingabewerte enthält, wird die eingefügte Zeile aus dem Insert-Operator selbst übernommen.

Hinweis: Die Object-Eigenschaft kann zusätzliche nicht gruppierte Indizes auflisten, die der Operator gleichzeitig mit dem gruppierten Index ändert.

Clustered Index Insert ist ein physischer Operator.
Gruppierter Indexzusammenführung Der Clustered Index Merge -Operator übernimmt einen Mergedatenstrom für einen gruppierten Index. Der Operator löscht, aktualisiert oder fügt Zeilen aus dem gruppierten Index ein, der in der Eigenschaft Objekt angegeben ist, die im Bereich Eigenschaften der grafischen und XML-Anzeigepläne aufgeführt ist. Der tatsächliche Vorgang hängt vom Laufzeitwert der ActionColumn-Eigenschaft ab.

Hinweis: Die Object-Eigenschaft kann zusätzliche nicht gruppierte Indizes auflisten, die der Operator gleichzeitig mit dem gruppierten Index ändert.

Clustered Index Merge ist ein physischer Operator.
Clustered-Index-Scan Der Gruppierter Index-Scan Operator scant den in der Objekt-Eigenschaft angegebenen gruppierten Index, der im Eigenschaften-Bereich der grafischen und XML-Showplans aufgeführt ist. Wenn ein optionales Prädikat vorhanden ist, werden nur die Zeilen zurückgegeben, die das Prädikat erfüllen. Wenn die Eigenschaft Sortiert im Eigenschaftenbereich oder im XML-Showplan True lautet, 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 eigenschaft OrderedFalse ist, überprüft die Datenbank-Engine den Index, ohne die Reihenfolge der Ausgabe zu garantieren. Die SeekPredicate-Eigenschaft ist nur für einen partitionierten gruppierten Index verfügbar.

Clustered Index Scan ist ein logischer und physischer Operator.
Gruppierte Indexsuche Der Clustered Index Seek -Operator verwendet die Suchfunktionen der Indizes, um Zeilen aus einem gruppierten Index abzurufen. Die im Eigenschaftenbereich der grafischen und XML-Showplans aufgelistete Objekteigenschaft enthält den Namen des verwendeten Gruppierten Indexes. Das SeekPredicate enthält das Prädikat für die Suche. Mit diesem Index werden von der Datenbank-Engine nur die Zeilen verarbeitet, die das SeekPredicate erfüllen. Es kann auch eine Eigenschaft Predicate enthalten, die von der Datenbank-Engine für alle Zeilen ausgewertet wird, die das SeekPredicate erfüllen. Dies ist jedoch optional, und in diesem Fall werden keine Indizes verwendet, um diesen Prozess abzuschließen. Die Ordered-Eigenschaft ist in der Regel True für diesen Operator.

Clustered Index Seek ist ein logischer und physischer Operator.
Clustered Index Update Der Clustered Index Update-Operator aktualisiert der Eingabezeilen im gruppierten Index, der in der Objekt-Eigenschaft angegeben und im Eigenschaftenbereich der grafischen und XML-Showpläne aufgeführt ist. Wenn die Prädikateigenschaft vorhanden ist, werden nur die Zeilen aktualisiert, die dieses Prädikat erfüllen. Wenn die Eigenschaft SetPredicate vorhanden ist, wird jede aktualisierte Spalte auf diesen Wert festgelegt. Wenn die Eigenschaft DefineValue 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.

Hinweis: Die Object-Eigenschaft kann zusätzliche nicht gruppierte Indizes auflisten, die der Operator gleichzeitig mit dem gruppierten Index ändert.

Clustered Index Update ist ein logischer und physischer Operator.
Einklappen 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. Der Eigenschaftenbereich enthält ein Gruppieren nach-Prädikat, das eine Liste der 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 sowohl ein logischer als auch physischer Operator.
Columnstore-Index löschen Der Operator Columnstore-Index löschen steht für das Löschen von Zeilen aus dem Columnstore-Index, der in der Eigenschaft Objekt angegeben ist, die im Bereich Eigenschaften des grafischen und des XML-Showplans aufgeführt ist. Das Löschen erfolgt über den Clustered Index Delete für einen gruppierten Columnstore-Index und über den Index Delete-Operator für einen nicht gruppierten Columnstore-Index. Der Indextyp (Clustered, NonClustered, ViewClustered oder ViewNonClustered) wird in der IndexKind-Eigenschaft im XML-Showplan angegeben. Das SeekPredicate-Element wird für das Löschen eines Columnstore-Indexes nicht unterstützt. Zu löschende Zeilen werden von einem untergeordneten Operator gelesen.

Columnstore Index Delete ist ein physischer Operator.
Columnstore-Index-Einfügen Der Operator Columnstore-Index Insert steht für das Einfügen von Zeilen aus seiner Eingabe in den Columnstore-Index, der in der Eigenschaft Objekt angegeben ist, die im Bereich Eigenschaften des grafischen und des XML-Showplans aufgeführt ist. Das Einfügen erfolgt über den Clustered Index Insert für einen gruppierten Columnstore-Index und über den Index Insert-Operator für einen nicht gruppierten Columnstore-Index. Der Indextyp (Clustered, NonClustered, ViewClustered oder ViewNonClustered) wird in der IndexKind-Eigenschaft im XML-Showplan angegeben. Der XML-Showplan enthält SetPredicate- und ColumnReference-Eigenschaften, die verwendet werden können, um den Wert zu bestimmen, auf den jede Spalte festgelegt ist.

Columnstore-Index Insert ist ein physischer Operator.
Columnstore-Index-Zusammenführung Der Columnstore-Index Merge stellt die Anwendung eines Merge-Datenstroms unter Verwendung des Clustered Index Merge-Operators dar. Der Operator löscht, aktualisiert oder fügt Zeilen aus dem gruppierten Columnstore-Index ein, der in der Eigenschaft Objekt angegeben ist, die im Bereich Eigenschaften der grafischen und XML-Anzeigepläne aufgeführt ist. Der Indextyp (Clustered, NonClustered, ViewClustered oder ViewNonClustered) wird in der IndexKind-Eigenschaft im XML-Showplan angegeben. Der tatsächliche Vorgang hängt vom Laufzeitwert der ActionColumn-Eigenschaft ab.

Columnstore-Index Merge ist ein physischer Operator.
Columnstore-Index-Scan Der Operator Columnstore-Index Scan stellt einen Scan des Columnstore-Indexes dar, der in der Eigenschaft Objekt angegeben ist, die im Bereich Eigenschaften des grafischen und des XML-Showplans aufgeführt ist. Der Scan erfolgt über den Clustered Index Scan für einen gruppierten Columnstore-Index und über den Index Scan-Operator für einen nicht gruppierten Columnstore-Index. Der Indextyp (Clustered, NonClustered, ViewClustered oder ViewNonClustered) wird in der IndexKind-Eigenschaft im XML-Showplan angegeben. Wenn ein optionales Prädikat vorhanden ist, werden nur die Zeilen zurückgegeben, die das Prädikat erfüllen. Die SeekPredicate-Eigenschaft ist nur für einen partitionierten Columnstore-Index und nur für Gleichheits- oder Ungleichheitsbedingungen verfügbar. Wenn sich die partitionierte Spalte im Abfrage-Prädikat befindet, kann die Eliminierung von Partitionen und Zeilengruppen die Anzahl der zu scannenden Zeilengruppen verringern.

Columnstore-Index Scan ist ein physischer Operator.
Columnstore-Indexaktualisierung Der Operator Columnstore-Indexaktualisierung stellt eine Aktualisierung einer oder mehrerer Zeilen im Columnstore-Index dar, der in der Eigenschaft Objekt angegeben ist, die im Bereich Eigenschaften des grafischen und des XML-Showplans aufgeführt ist. Aktualisierungen erfolgen über den Operator Clustered Index Update für einen gruppierten Columnstore-Index und über den Index Update-Operator für einen nicht gruppierten Columnstore-Index. Der Indextyp (Clustered, NonClustered, ViewClustered oder ViewNonClustered) wird in der IndexKind-Eigenschaft im XML-Showplan angegeben. SeekPredicate wird für eine Columnstore-Indexaktualisierung nicht unterstützt. Zu aktualisierende Zeilen werden von einem untergeordneten Operator gelesen. Wenn die Eigenschaft SetPredicate vorhanden ist, wird jede aktualisierte Spalte auf diesen Wert festgelegt. Wenn die Eigenschaft DefineValue 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.

Columnstore-Index Update ist ein physischer Operator.
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 ist ein Filterprädikat oder ein Joinprädikat.

Compute Scalar-Operatoren in Showplans, die durch SET STATISTICS XML generiert wurden, enthalten eventuell nicht das RunTimeInformation-Element. In grafischen Showplans können Tatsächliche Zeilen, Tatsächliche Neubindungen und Tatsächliche Rückspulvorgänge im Fenster Eigenschaften fehlen, wenn die Option den 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. Die Anzahl der Ausführungen in der von SET STATISTICS PROFILE generierten Showplanausgabe ist gleich der Summe der Rebinds und Rewinds in der von SET STATISTICS XML generierten Showplanausgabe.

Compute Scalar ist sowohl ein logischer als auch physischer Operator.
Verkettung Der Concatenation -Operator scannt mehrere Eingaben und gibt die gescannten Zeilen zurück. Verkettung wird im Allgemeinen verwendet, um das Transact-SQL-Konstrukt UNION ALL zu implementieren. Der physische Operator Concatenation verfügt über mindestens zwei 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.
Bedingt (Wenn und Während) Der Conditional-Operator führt eine bedingte Verarbeitung basierend auf einer IF- oder WHILE-Loop aus. Wenn und Während sind Sprachelemente.
Konstanter 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. Der Konstantenscan kann eine oder mehrere Zeilen mit null oder mehr Spalten generieren.

Konstanter Scan ist ein physischer Operator.
Konvertieren Der Convert -Operator wandelt einen skalaren Datentyp in einen anderen um.

Convert ist ein Sprachelement.
Kreuzverknüpfung 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.
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 beim Ausführen eines Cursors umfasst einen physischen Operator. Die logischen Operatoren beschreiben eine Cursoreigenschaft, z. B. dass der Cursor nur-lesend ist.

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 Der Operator Declare weist eine lokale Variable im Abfrageplan zu.

Declare ist ein Sprachelement.
Delete Der Delete-Operator löscht Zeilen (aus einem Objekt), die das optionale Prädikat im Eigenschaften-Bereich erfüllen.

Delete ist ein logischer Operator.
Gelöschter Scan In Triggern durchsucht der Deleted Scan-Operator die gelöschte Tabelle.

Gelöschter Scan ist ein logischer und physischer Operator.
Keine Eindeutig Mithilfe des Distinct -Operators werden Duplikate aus einem Rowset oder aus einer Sammlung von Werten entfernt.

Distinct ist ein logischer Operator.
Keine Unterschiedliche Sortierung Der logische Operator Distinct Sort scannt die Eingabe, entfernt Duplikate und sortiert nach den Spalten, die im distinct order by-Prädikat der Bereichs Eigenschaften angegeben sind.

Distinct Sort ist ein logischer Operator.
Verteilen von Datenströmen Der Distribute Streams -Operator wird nur in parallelen Abfrageplänen verwendet. Der Distribute Streams-Operator nimmt 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 einem der Ausgabedatenströme angezeigt, es sei denn, der Partitionstyp ist Broadcast, in diesem Fall wird jede Eingabezeile in allen Ausgabedatenströmen 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 der Bereich Eigenschaften ein Partitionsspalten-Prädikat und die Partitionierungsspalten.

"Datenströme verteilen " ist ein logischer Operator.
Dynamisch Der Dynamic -Operator verwendet einen Cursor, der alle von anderen vorgenommenen Änderungen wahrnimmt.

Dynamisch ist ein physischer Operator.
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 in einer eifrigen Weise: Wenn der übergeordnete Operator von Spool die erste Zeile anfordert, nimmt der Spool-Operator alle Zeilen seines Eingabeoperators auf und speichert sie im Spool.

Eager Spool ist ein logischer Operator.
Abfrage abrufen Der Fetch Query -Operator ruft Zeilen ab, wenn eine Abrufoperation für einen Cursor ausgegeben wird.

Fetch Query ist ein physischer Operator.
Filter Der Filter-Operator scannt die Eingabe und gibt nur die Zeilen zurück, die dem Filterausdruck (Prädikat) entsprechen, der im Bereich Eigenschaften angezeigt wird.
Keine Flow Distinct Der 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).

Flow Distinct ist ein logischer Operator.
Überprüfung der Fremdschlüsselverweise Der Operator für die Überprüfung der Fremdschlüsselverweise führt direkte Überprüfungen der referentiellen Integrität durch, indem die geänderte Zeile mit den Zeilen in den verweisenden Tabellen verglichen werden, um sicherzustellen, dass die Änderung nicht die referentielle Integrität unterbricht. Der Operator für die Überprüfung der Fremdschlüsselverweise wird verwendet, wenn mehr als 253 Fremdschlüsselverweise auf demselben primären oder eindeutigen Schlüssel vorhanden sind.

Die Überprüfung der Fremdschlüsselverweise ist ein logischer und physischer Operator.
Vollständige äußere Verknüpfung 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 Zeilen zurück von:

- Die erste Eingabe, die keine Übereinstimmungen in der zweiten Eingabe hatte.

- Die zweite Eingabe ohne Übereinstimmungen in der ersten Eingabe.

Eingaben, die keine übereinstimmenden Werte enthalten, werden als NULL-Wert zurückgegeben.

Full Outer Join ist ein logischer Operator.
Datenströme sammeln Der Gather Streams -Operator wird nur in parallelen Abfrageplänen verwendet. Der Gather Streams-Operator verarbeitet mehrere Eingabedatenströme, indem er diese zusammenfasst und genau einen Ausgabedatenstrom von Datensätzen erzeugt. 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 der Bereich Eigenschaften ein order by-Prädikat und die Namen der zu sortierenden Spalten.

Gather Streams ist ein logischer Operator.
Hash-Übereinstimmung 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 im Bereich Eigenschaften angezeigt. Anschließend wird für jede Probenzeile, falls zutreffend, ein Hashwert (mithilfe derselben Hashfunktion) berechnet und in der Hashtabelle nach Übereinstimmungen gesucht. Wenn ein Rest-Prädikat vorhanden ist (als Build Residual oder Probe Residual im Eigenschaftenbereich dargestellt), muss dieses Prädikat ebenfalls erfüllt sein, damit Zeilen als Übereinstimmung betrachtet werden. 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 Abfragen der 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.

DerHash Match -Operator ist ein physischer Operator. Weitere Informationen finden Sie unter Grundlegendes zu Hashjoins.
Index löschen Der Operator Index Delete löscht Zeilen aus dem nicht geclusterten Index, der im Bereich Eigenschaften angegeben ist.

Index Delete ist ein physischer Operator.
Index einfügen Mithilfe des Index Insert-Operators werden Zeilen aus der Eingabe in den nicht gruppierten Index eingegeben, der im Bereich Eigenschaften angegeben ist. Der Bereich Eigenschaften enthält auch ein set-Prädikat, das den für die einzelnen Spalten festgelegten Wert anzeigt.

Index Insert ist ein physischer Operator.
Indexscan Der Index Scan-Operator ruft alle Zeilen des nicht gruppierten Indexes ab, der im Bereich Eigenschaften angegeben ist. Wenn ein optionales where-Prädikat im Bereich Eigenschaften vorhanden ist, werden nur die Zeilen zurückgegeben, die das Prädikat erfüllen. Wenn die Ordered-Eigenschaft"True" lautet, werden die Zeilen in der Reihenfolge zurückgegeben, in der der nicht gruppierte Index sie sortiert hat. Wenn die eigenschaft OrderedFalse ist, überprüft die Datenbank-Engine den Index, ohne die Reihenfolge der Ausgabe zu garantieren.

Index Scan ist ein logischer und physischer Operator.
Index Seek Der Index Seek -Operator verwendet die Suchfunktionen der Indizes, um Zeilen aus einem nicht gruppierten Index abzurufen. Der Bereich Eigenschaften enthält den Namen des verwendeten nicht gruppierten Indexes. Außerdem enthält sie auch das seek-Prädikat. Mit diesem Index werden von der Datenbank-Engine nur die Zeilen verarbeitet, die das Prädikat seek erfüllen. Optional kann ein where-Prädikat enthalten sein, das von der Datenbank-Engine für alle Zeilen ausgewertet wird, bei denen das seek-Prädikat erfüllt wird (es werden hierfür keine Indizes verwendet).

Index Seek ist ein logischer und physischer Operator.
Index Spool Der Index-Spool-Operator enthält ein seek-Prädikat im Bereich Eigenschaften. Der Index-Spool-Operator überprüft seine Eingabezeilen, platziert eine Kopie jeder Zeile in einer ausgeblendeten Spooldatei (in der tempdb-Datenbank gespeichert und nur für die Lebensdauer der Abfrage vorhanden) und erstellt einen Index für die Zeilen. Dies ermöglicht es Ihnen, mithilfe der Indexsuchfunktionen nur die Zeilen auszugeben, die das seek-Prädikat erfüllen.

Index Spool ist ein physischer Operator.
Indexaktualisierung Der physische Operator Index Update aktualisiert Eingabezeilen in dem nicht gruppierten Index, der im Bereich Eigenschaften angegeben ist. Wenn ein set-Prädikat vorhanden ist, wird jede aktualisierte Spalte auf diesen Wert festgelegt.

Index Update ist ein physischer Operator.
Innere Verknüpfung Der Inner Join-Operator gibt alle Zeilen zurück, die das Joinprädikat der ersten (oberen) Eingabe mit der zweiten (unteren) Eingabe erfüllen.

Inner Join ist ein logischer Operator.
Einfügen Der Operator Insert fügt alle Eingabezeilen in das Objekt ein, das im Bereich Eigenschaften angegeben ist. Der physische Operator ist entweder der Table Insert-, Index Insert- oder Clustered Index Insert -Operator.

Insert ist ein logischer Operator.
Eingefügter Scan In Triggers scannt der Inserted Scan-Operator die inserted-Tabelle.

Inserted Scan ist sowohl ein logischer als auch ein physischer Operator.
Intrinsic Der Intrinsic-Operator ruft eine interne Transact-SQL-Funktion auf.

Intrinsic ist ein Sprachelement.
Iterator Das Iterator-Sammelsymbol wird angezeigt, wenn die Logik, die grafische Showplans erzeugt, kein geeignetes Symbol für den Iterator finden kann. Das Sammelsymbol zeigt nicht notwendigerweise einen Fehlerzustand an.
Schlüsselsuche Der Schlüsselsuchoperator ist eine Textmarkensuche in einer Tabelle mit einem gruppierten Index oder einem gruppierten Spaltenspeicherindex. Für einen gruppierten Index enthält der Eigenschaftenbereich den Namen des gruppierten Indexes und den Clusterschlüssel, der zum Nachschlagen der Zeile verwendet wird. Für einen gruppierten Columnstore-Index wird die ColStoreLoc anstelle des Clusterschlüssels bereitgestellt. Key Lookup wird stets von einem Nested Loops -Operator begleitet. Wenn die WITH PREFETCH-Klausel im Bereich Eigenschaften auftritt, wurde vom Abfrageprozessor ermittelt, dass Lesezeichen im gruppierten Index am besten mit asynchronem Vorauslesen (Read-Ahead) nachgeschlagen werden sollten.

Eine Schlüsselsuche mit einer hohen Anzahl von Ausführungen relativ zur Tabellengröße kann davon profitieren, einen abgedeckten Index hinzuzufügen. Eine geringe Anzahl von Ausführungen ist in der Regel kein Leistungsproblem.
Keyset Der Keyset-Operator verwendet einen Cursor, für den Aktualisierungen sichtbar sind, jedoch keine von anderen vorgenommenen Einfügungen.

Keyset ist ein physischer Operator.
Language-Element Das Language Element-Sammelsymbol wird angezeigt, wenn die Logik, die grafische Showplans erzeugt, kein geeignetes Symbol für den Iterator finden kann. Das Sammelsymbol zeigt nicht notwendigerweise einen Fehlerzustand an.
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 durch einen Nested Loops-Operator), aber keine erneute Zuordnung erforderlich ist, werden die gespoolten Daten anstelle eines erneuten Scannens der Eingabe verwendet. 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.
Keine Linker Anti-Semi-Verknüpfung 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 im Bereich Eigenschaften vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar.

Left Anti Semi Join ist ein logischer Operator.
Keine Linke äußere Verknüpfung Der Left Outer Join-Operator gibt alle Zeilen zurück, die das Joinprädikat der ersten (oberen) Eingabe mit der zweiten (unteren) Eingabe erfüllen. Es werden auch alle Zeilen aus der ersten Eingabe zurückgegeben, die in der zweiten Eingabe keine Übereinstimmung haben. Die nicht übereinstimmenden Zeilen in der zweiten Eingabe werden als Nullwerte zurückgegeben. Wenn kein Joinprädikat im Bereich Eigenschaften vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar.

Left Outer Join ist ein logischer Operator.
Keine Linker Semibeitritt Der Left Semi Join-Operator 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 im Bereich Eigenschaften vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar.

Left Semi Join ist ein logischer Operator.
Protokollzeilenscan Der Log Row Scan -Operator scannt das Transaktionsprotokoll.

Log Row Scan ist sowohl ein logischer als auch ein physischer Operator.
Zusammenführungsintervall 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 vor einem oder mehreren Compute Scalar-Operatoren, die über Constant Scan-Operatoren angeordnet sind. Diese Operatoren konstruieren die Intervalle (als Spalten in einer Zeile dargestellt), die dieser Operator zusammenführt.

Merge Interval ist sowohl ein logischer als auch physischer Operator.
Merge-Join Der Merge Join-Operator führt die innere Verknüpfung, die linke äußere Verknüpfung, die linke Semiverknüpfung, die linke Anti-Semi-Verknüpfung, die rechte äußere Verknüpfung, die rechte Semiverknüpfung, die rechte Anti-Semi-Verknüpfung, die vollständige äußere Verknüpfung, die Verkettung und die Union-Vereinigung logische Vorgänge aus.

Im Bereich Eigenschaften enthält der Merge Join-Operator ein merge-Prädikat, wenn der Vorgang einen 1:n-Join ausführt, oder ein many-to-many merge-Prädikat, wenn der Vorgang einen m:n-Join ausführt. Der Bereich Eigenschaften 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 Merge-Join ist besonders effektiv, wenn kein expliziter Sortiervorgang erforderlich ist, zum Beispiel, wenn in der Datenbank ein geeigneter B-Baum-Index vorhanden ist oder wenn die Sortierreihenfolge für mehrere Operationen genutzt werden kann, wie beispielsweise einen Merge-Join und eine Gruppierung mit Rollup.

BeiMerge Join handelt es sich um einen physischen Operator. Weitere Informationen finden Sie unter Einführung in Merge Joins.
Geschachtelte Schleifen Der Nested Loops -Operator führt die logischen Operationen „innere Verknüpfung“, „linke äußere Verknüpfung“, „linke Semiverknüpfung“ und „linke Antisemiverknüpfung“ aus.

Geschachtelte Schleifen-Joins führen die innere (untere) Eingabe einmal für jede Zeile der äußeren (oberen) Eingabe aus. Wenn die Outer References-Eigenschaft vorhanden ist, ist die Verknüpfung dynamisch: Die aufgelisteten Spaltenwerte aus der äußeren Zeile werden in die innere Eingabe verschoben, sodass die Operatoren nur übereinstimmende Zeilen zurückgeben. Die Prädikateigenschaft wird in diesem Fall nicht verwendet. Wenn äußere Verweise nicht vorhanden sind, ist die Verknüpfung statisch: Die innere Eingabe gibt die gleichen Zeilen für jede Ausführung zurück, und ein Prädikat im Eigenschaftenbereich bestimmt, welche Kombinationen als Übereinstimmungen gelten.

Wenn das OPTIMIZED Attribut auf True festgelegt ist, ordnet der Operator die äußere Eingabe neu an, um die E/A-Lokalität beim Zugriff auf die innere Eingabe zu verbessern. Dies wird manchmal als „Optimized Nested Loops Join“ bezeichnet.

Nested Loops ist ein physischer Operator. Weitere Informationen finden Sie unter Grundlegendes zu Joins geschachtelter Schleifen.
Keine Onlineindex einfügen Der Operator Online Index Insert gibt an, dass eine Indexoperation (Erstellen, Ändern oder Löschen) online durchgeführt wird. Die zugrunde liegenden Tabellendaten bleiben daher während des Indexvorgangs für Benutzer verfügbar.

Online Index Insert ist ein physischer Operator.
Keine Parallelität Der Parallelism-Operator (oder Exchange-Iterator) führt die logischen Operationen Distribute Streams, Gather Streams und Repartition Streams durch. Der Bereich Eigenschaften kann ein Partitionsspalten-Prädikat mit einer durch Trennzeichen getrennten Liste der zu partitionierenden Spalten enthalten. Der Bereich Eigenschaften kann außerdem ein order by-Prädikat enthalten, in dem die Spalten aufgelistet sind, um die Sortierreihenfolge bei der Partitionierung beizubehalten.

Hinweis: 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 werden für die tatsächliche Anzahl der Zeilen sowie die tatsächliche Anzahl der Ausführungen Nullen 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. Manchmal werden parallele Abfragepläne inseriell ausgeführt, wenn eine hohe gleichzeitige Belastung des Servers vorliegt.

Parallelism ist ein physischer Operator. Weitere Informationen zum Parallelismusoperator finden Sie unter The Parallelism Operator.
Parameter-Tabellen-Scan Der Parameter-Tabellen-Scan-Operator liest die interne Zeilenmenge, die während einer INSERT ... EXEC Anweisung erstellt wird. Dieses Rowset enthält die Ausgabe des ausgeführten Moduls, z. B. eine gespeicherte Prozedur oder einen dynamischen SQL-Batch, wenn diese Ergebnisse in eine Tabelle, temporäre Tabelle oder Tabellenvariable eingefügt werden.

Parameter Table Scan ist ein logischer und physischer Operator.
Keine Teilaggregat Teilaggregat wird in der Regel in parallelen Plänen verwendet. Hier wird eine Aggregatfunktion auf so viele Input-Zeilen wie möglich angewendet, damit das Schreiben auf den Datenträger, auch als "Spill" bekannt, nicht erforderlich ist. Hash Match ist der einzige physische Operator (Iterator), der die Teilaggregation implementiert.

Partial Aggregate ist ein logischer Operator.
Population-Abfrage Der Population Query -Operator füllt die Arbeitstabelle eines Cursors auf, wenn der Cursor geöffnet wird.

Die Populationsabfrage ist ein physischer Operator.
Put Der Put-Operator fügt Daten in eine externe Tabelle (PolyBase) ein. Im Gegensatz zu anderen Einfügeoperatoren gibt Put keine Zeilen an den übergeordneten Operator zurück. In SQL Server 2016 (13.x) bis SQL Server 2019 (15.x) zielt der Operator Putoperator auf Hadoop ab und wird im Zeilenmodus ausgeführt. In SQL Server 2022 (16.x) und höheren Versionen zielt der Operator Put auf Azure Storage oder S3-kompatiblen Speicher ab und wird im Batchmodus ausgeführt. Weitere Informationen finden Sie unter CREATE EXTERNAL TABLE AS SELECT (CETAS).

Put ist ein physischer Operator.

Gilt für: SQL Server 2016 (13.x) und höhere Versionen.
Abfrage aktualisieren Der Refresh Query -Operator ruft aktuelle Daten für die Zeilen im Fetchpuffer ab.

Die Aktualisierungsabfrage ist ein physischer Operator.
Remotelöschung Der Remote Delete -Operator löscht die Eingabezeilen in einem Remoteobjekt.

Remote Delete ist ein logischer und physischer Operator.
Remote-Index-Scan Der Remote Index Scan-Operator durchsucht den im Bereich Eigenschaften angegebenen Remoteindex.

Remote Index Scan ist ein logischer und physischer Operator.
Remoteindexsuche Der Remote Index Seek -Operator verwendet die Suchmöglichkeiten eines Remoteindexobjekts, um Zeilen abzurufen. Der Bereich Eigenschaften enthält den Namen des verwendeten Remoteindexes und das seek-Prädikat.

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

Remote Insert ist ein logischer und physischer Operator.
Remote-Abfrage Durch den Operator Remote Query wird eine Abfrage an eine Remotequelle übermittelt. Der Text der an den Remoteserver gesendeten Abfrage wird im Bereich Eigenschaften angezeigt.

Remote Query ist ein logischer und physischer Operator.
Remotescan Der Operator Remote Scan überprüft ein Remoteobjekt. Der Name des Remoteobjekts wird im Bereich Eigenschaften angezeigt.

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

Remote Update ist ein logischer und physischer Operator.
Verteilung der Datenströme Der Repartition Streams-Operator (oder Exchange-Iterator) verbraucht mehrere Datenströme und erzeugt mehrere Datenströme mit 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 ist, enthält der Bereich Eigenschaften ein Partitionsspalten-Prädikat und die Partitionierungsspalten. Wenn die Ausgabe sortiert ist, enthält der Bereich Eigenschaften ein order by-Prädikat und die zu sortierenden Spalten. Der Operator wird nur in parallelen Abfrageplänen verwendet.

Repartition Streams ist ein logischer Operator.
Ergebnis 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-Nachschlagevorgang RID Lookup ist eine Lesezeichen-Suche in einem Heap, bei der eine bereitgestellte Zeilenkennung (RID) verwendet wird. Der Bereich Eigenschaften 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-Suche wird immer von einem Nest-Loop-Operator begleitet.

RID Lookup ist ein physischer Operator. Weitere Informationen zur Lesezeichensuche finden Sie unter Read Committed und Lesezeichensuche.
Keine Rechter Anti-Semi-Verknüpfung 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 im Bereich Eigenschaften erfüllt wird (bei fehlendem Prädikat sind alle Zeilen übereinstimmende Zeilen).

Right Anti Semi Join ist ein logischer Operator.
Keine Rechte äußere Verknüpfung Der Right Outer Join-Operator gibt jede Zeile zurück, die dem Join der zweiten (unteren) Eingabe mit einer passenden Zeile der ersten (oberen) Eingabe entspricht. Es werden auch alle Zeilen aus der zweiten Eingabe zurückgegeben, die in der ersten Eingabe keine Übereinstimmung haben, verbunden mit NULL. Wenn kein Joinprädikat im Bereich Eigenschaften vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar.

Right Outer Join ist ein logischer Operator.
Keine Rechter Semibeitritt 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 im Bereich Eigenschaften vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar.

Right Semi Join ist ein logischer Operator.
Zeilenanzahl-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 zum Beispiel ein Nested Loops-Operator einen Left Semi Join-Vorgang ausführt und das Join-Prädikat auf die innere Eingabe angewendet wird, kann ein Row Count Spool am Anfang der inneren Eingabe des Nested Loops-Operators gesetzt 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.

BeimRow Count Spool -Operator handelt es sich um einen physischen Operator.
Keine Segmentumteilung Ein paralleler Abfrageplan kann mitunter konzeptionelle Bereiche von Iteratoren enthalten. Alle Iteratoren innerhalb eines solchen Bereichs können in parallelen Threads ausgeführt werden. Die Regionen selbst müssen seriell laufen. Bestimmte Parallelism -Iteratoren innerhalb eines einzelnen Bereichs werden Branch Repartitiongenannt. Der Parallelism -Iterator an der Grenze zwischen zwei Bereichen wird Segment Repartitiongenannt.

SowohlBranch Repartition als auch Segment Repartition sind logische Operatoren.
Segment Der Segment-Operator teilt die Eingabeset basierend auf dem Wert von mindestens einer Spalte in Segmente auf. Diese Spalten werden als Argumente im Operator Segment angezeigt. Die Eingabe wird nach diesen Spalten sortiert. Der Operator verwendet die Segmentspalte, um die erste Zeile jedes Segments zu markieren.

Segment ist ein physischer und logischer Operator.
Sequenzprojekt Der Sequence Project -Operator fügt Spalten hinzu, um für eine geordnete Menge Berechnungen auszuführen. Sie erfordert die Aufteilung des Eingabesatzes in Segmente basierend auf dem Wert einer oder mehrerer Spalten.

Sequence Project ist ein logischer und physischer Operator.
Sequence Der Sequence-Operator führt jede Eingabe in Sequenz (von oben nach unten) aus und gibt nur die Zeilen zurück, die von der letzten (unteren) Eingabe stammen. Häufig werden breite Aktualisierungspläne verwendet (wobei jede Eingabe in der Regel eine Aktualisierung eines anderen Objekts ist), Abfragen, die tabellenwertige Funktionen mit mehreren Anweisungen verwenden, und Abfragen, die SHORTEST_PATH auf einer Grafiktabelle verwenden.

Sequence ist sowohl ein logischer als auch physischer Operator.
Momentaufnahme Mit dem Snapshot -Operator wird ein Cursor erstellt, der von anderen vorgenommene Änderungen nicht wahrnimmt.

Snapshot ist ein physischer Operator.
Sortieren Der Sort -Operator sortiert alle eingehenden Zeilen. Der Bereich Eigenschaften 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.
Aufteilen 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 Mit dem Spool -Operator wird ein Zwischenabfrageergebnis in die tempdb -Datenbank geschrieben.
Stream-Aggregat 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. Für den Stream Aggregate -Operator muss die Eingabe innerhalb der Gruppen nach den Spalten sortiert sein. 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 im Bereich Eigenschaften aufgelistet, und die Aggregatausdrücke sind in der Spalte Definierte Werte aufgelistet.

Stream Aggregate ist ein physischer Operator.
Schalter Switch ist ein spezieller Verkettungsiterator, der über n Eingaben verfügt. Mit jedem Switch -Operator ist ein Ausdruck verbunden. Je nach Rückgabewert des Ausdrucks (zwischen 0 und n-1) führt Switch die entsprechende Eingabe aus und gibt seine Zeilen zurück. Switch wird verwendet, um Abfragepläne für Anweisungen gegen partitionierte Ansichten zu implementieren. Es wird auch verwendet, um Abfragepläne mit schnellen Vorwärtscursorn mit bestimmten Operatoren wie dem TOP Operator zu implementieren.

Switch ist sowohl ein logischer als auch ein physischer Operator.
Tabelle löschen Mit dem Operator Table Delete werden Zeilen aus der im Bereich Eigenschaften angegebenen Tabelle des Abfrageausführungsplans gelöscht.

Table Delete ist ein physischer Operator.
Tabelleneinfügung Durch den Operator Table Insert werden Eingabezeilen in die im Bereich Eigenschaften des Abfrageausführungsplans angegebene Tabelle eingefügt. Der Bereich Eigenschaften enthält auch ein set-Prädikat, das den für die einzelnen Spalten festgelegten Wert anzeigt. 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.
Tabellenzusammenführung Der Table Merge -Operator wendet einen Mergedatenstrom auf einen Heap an. Der Operator löscht oder aktualisiert Zeilen in der Tabelle, die im Bereich Eigenschaften des Operators angegeben ist, bzw. fügt Zeilen in diese ein. Der tatsächliche Vorgang hängt vom Laufzeitwert der ActionColumn-Eigenschaft ab

Table Merge ist ein physischer Operator.
Tabellenabfrage Mit dem Operator Table Scan werden alle Zeilen aus der im Bereich Eigenschaften angegebenen Tabelle des Abfrageausführungsplans abgerufen. Wenn ein where-Prädikat im Bereich Eigenschaften vorhanden ist, werden nur die Zeilen zurückgegeben, die das Prädikat erfüllen.

Table Scan ist ein logischer und physischer Operator.
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 durch einen Nested Loops-Operator), aber keine Neubindung erforderlich ist, werden die gepufferten Daten verwendet, anstatt die Eingabe neu zu scannen.

Table Spool ist ein physischer Operator.
Tabellenaktualisierung Mithilfe des Table Update-Operators werden Eingabezeilen aktualisiert, die im Bereich Eigenschaften 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 in dieser Abfrage verwiesen werden.

Table Update ist ein physischer Operator.
Tabellenwert-Funktion Mit dem Operator Tabellenwertfunktion wird eine Tabellenwertfunktion ausgewertet (entweder 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. DieTabellenwertfunktion 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.

- 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.

DieTabellenwertfunktion ist sowohl ein logischer als auch ein physischer Operator.
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. Der Bereich Eigenschaften 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 ein logischer als auch physischer Operator.
Keine Top N-Sortierung Top N Sort ähnelt dem Sort-Iterator, allerdings werden nur die ersten N Zeilen benötigt und nicht die gesamte Resultatmenge. Bei kleinen Werten für N versucht die SQL Server-Abfrageausführungs-Engine, den gesamten Sortiervorgang im Arbeitsspeicher auszuführen. Bei großen Werten für N greift die Abfrageausführungs-Engine auf die mehr generische Methode der Sortierung zurück, für die N kein Parameter ist.
UDX Erweiterte Operatoren (UDX) implementieren einen von vielen XQuery- und XPath-Vorgängen in SQL Server.

- Der erweiterte Operator (UDX) FOR XML wird verwendet, um das relationale Zeilen-Set, das er entgegennimmt, in eine XML-Darstellung innerhalb einer einzelnen BLOB-Spalte in einer einzigen Ausgabereihe zu serialisieren. Bei diesem XML-Aggregationsoperator wird die Reihenfolge berücksichtigt.

- Der erweiterte Operator (UDX) XML SERIALIZER ist ein reihenfolgeabhängiger XML-Aggregationsoperator. 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 ein spezieller Typ von XML SERIALIZER, der zur Verarbeitung von Eingabezeilen verwendet wird, die XML-Fragmente darstellen und in der XQuery-Einschub-Datenänderungserweiterung 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-Listentrennoperator. Für jede Eingabezeile, die einen XML-Knoten darstellt, erstellt das System eine oder mehrere Zeilen, wobei jede Zeile einen XQuery-Skalar enthält, der einen Listenelementwert darstellt, falls die Eingabe vom XSD-Listentyp ist.

- Der erweiterte Operator (UDX) XQUERY DATA wertet die XQuery-Funktion fn:data() für Eingaben 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() für Eingaben 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 den XML-Knoten in der XQuery-Erweiterung für das Ersetzen von Datenänderungen in der modify() Methode des XML-Typs.

UDX-Operatoren sind sowohl logische als auch physische Operatoren.
Union Der Union -Operator scannt mehrere Eingaben und gibt alle gescannten Zeilen aus, wobei Duplikate entfernt werden.

Union ist ein logischer Operator.
Aktualisieren Der Update-Operator aktualisiert jede Zeile aus seinem Eingabebereich innerhalb des Objekts, das im Bereich Eigenschaften des Abfrageausführungsplans angegeben ist.

Update ist ein logischer Operator. Der physische Operator ist "Tabellenaktualisierung", " Indexaktualisierung", " Clustered Index Update" oder "Columnstore Index Update".
Keine Fensteraggregat Der Window Aggregate-Operator wertet einen oder mehrere Aggregatausdrücke mit einer Fensterdefinition aus und fügt die Ergebnisse dem Datenstrom hinzu.

Window Aggregate ist ein logischer und physischer Operator.
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. Der Operator speichert alle Eingabezeilen in einer ausgeblendeten Arbeitstabelle in der tempdb-Datenbank oder im Arbeitsspeicher.

Window Spool ist sowohl ein logischer als auch physischer Operator.

Hinweis

In der Dokumentation wird der Begriff „B-Baum“ allgemein in Bezug auf Indizes verwendet. In Zeilenspeicherindizes implementiert die Datenbank-Engine einen B+-Baum. Dies gilt nicht für Columnstore-Indizes oder Indizes auf speicheroptimierten Tabellen. Weitere Informationen finden Sie im Leitfaden zur Architektur und zum Entwerfen von SQL Server- und Azure SQL-Indizes.