Referenz für logische und physische Showplanoperatoren
Gilt für: SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
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 der Ereignisse Extended Events Showplan 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 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:
Open()
: Mit der MethodeOpen()
wird ein physischer Operator initialisiert und dazu angewiesen, erforderliche Datenstrukturen einzurichten. Während der physische Betreiber möglicherweise vieleOpen()
-Anrufe empfängt, empfängt er in der Regel nur einen.GetRow()
: Mit der MethodeGetRow()
wird ein Operator angewiesen, die erste oder nächste Datenzeile abzurufen. Der physische Operator kann null oder mehrereGetRow()
-Aufrufe empfangen.Close()
: Mit der MethodeClose()
wird der physische Operator dazu angewiesen, einige Cleanupvorgänge auszuführen und sich selbst zu beenden. Ein physischer Telefonieanbieter empfängt nur einenClose()
-Anruf, aber einClose()
-Anruf wird nicht immer garantiert.
Die GetRow()
-Methode gibt eine Datenzeile zurück, und die Anzahl der Aufrufe wird als ActualRows in der durch den graphischen oder XML-Showplan erstellten Showplanausgabe angezeigt. Weitere Informationen zu diesen SET
-Optionen finden Sie unterSET 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 Open()
-Methode. ActualRebinds entspricht 1 und ActualRewinds entspricht 0, es sei denn, ein Operator befindet sich innerhalb eines geschachtelten Schleifenjoins. Wenn sich ein Operator innerhalb eines Schleifenjoins befindet, muss die Gesamtzahl 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 XML-Showplan-Ausgabe vorhanden, die mit und SET STATISTICS XML ON
dem grafischen Showplan erstellt wird. Sie werden nur für die Operatoren Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spoolund 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 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. 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 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 erneuten Bindungen und Zurückspulvorgänge sein.
Abbildung physischer und logischer 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.
Batchmodusausfü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.
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) und Azure Data Studio anzeigen.
Tipp
Wenn ein bestimmtes grafisches Ausführungsplansymbol einen gelben Kreis mit zwei Pfeil 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 Adaptiver Join-Operator können Sie wählen, ob eine Hashjoinmethode oder eine Methode mit einem Join geschachtelter Schleifen bis nach dem Scan der ersten Eingabe zurückgestellt wird. Adaptive Join-Operator (adaptiver Join) ist ein physischer Operator. Weitere Informationen finden Sie unter Grundlegendes zu adaptiven Joins. |
![]() |
Aggregat | Mit dem Aggregate-Operator wird ein Ausdruck berechnet, der MIN , MAX , SUM , COUNT , oder AVG enthält.Aggregate ist ein logischer und physischer Operator. |
![]() |
Arithmetic Expression | 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 | Async Concat | Der Async Concat-Operator wird nur in Remoteabfragen (verteilten Abfragen) verwendet. Diese Anweisung weist n untergeordnete Knoten und einen übergeordneten Knoten auf. Gewöhnlich sind manche untergeordnete Knoten Remotecomputer, die an einer verteilten Abfrage beteiligt sind. Async Concat gibt Open() -Aufrufe für alle untergeordneten Knoten gleichzeitig aus und wendet dann auf jeden untergeordneten Knoten ein Bitmap an. Für jedes Bit, das 1 ist, sendet Async Concat bei Bedarf die Ausgabezeilen an den übergeordneten Knoten. |
![]() |
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. 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 Create | 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 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 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 untergeordneten Knoten und n übergeordnete Knoten auf. Broadcast sendet die Eingabezeilen bei Bedarf an mehrere Consumer. Jeder Consumer erhält alle Zeilen. Wenn z. B. alle Consumer sich auf der Erstellungsseite eines Hashjoins befinden, werden n Kopien der Hashtabellen erstellt. |
![]() |
Build Hash | Gibt die Erstellung einer Batchhashtabelle für einen speicheroptimierten Columnstore-Index an. Gilt für: nur SQL Server 2012 (11.x). |
![]() |
Clustered Index Delete | 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: Änderungen an gruppierten Indizes können sich auf nicht gruppierte Indizes auswirken. Clustered Index Delete ist ein physischer Operator. |
![]() |
Clustered Index Insert | 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: Änderungen an gruppierten Indizes können sich auf nicht gruppierte Indizes auswirken. Clustered Index Insert ist ein physischer Operator. |
![]() |
Clustered Index Merge | 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: Änderungen an gruppierten Indizes können sich auf nicht gruppierte Indizes auswirken. Clustered Index Merge ist ein physischer Operator. |
![]() |
Clustered Index Scan | Der Operator Gruppierten Index-Scan scant den in der Objekteigenschaft angegebenen gruppierten Index, der im Eigenschaftenbereich 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. Wurde die Ordered-Eigenschaft auf False gesetzt, scannt die Datenbank-Engine den Index optimal (wobei die Ausgabe nicht unbedingt sortiert ist). Clustered Index Scan ist ein logischer und physischer Operator. |
![]() |
Clustered Index Seek | 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 einschließen, das die Datenbank-Engine für alle Zeilen auswertet, die das SeekPredicate erfüllen. Dies ist jedoch optional, und es werden keine Indizes für diesen Prozess verwendet. 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. Wurde die Ordered-Eigenschaft auf False gesetzt, durchsucht die Datenbank-Engine den Index optimal (wobei die Ausgabe nicht unbedingt sortiert ist). Die Ausgabe unter Beibehaltung der Reihenfolge zu verlangen, kann weniger effizient sein als eine unsortierte Ausgabe. Clustered Index Seek ist ein logischer und physischer Operator. |
![]() |
Clustered Index Update | Der Operator Gruppierten Index-Aktualisierung aktualisiert Eingabezeilen den in der Objekteigenschaft angegebenen gruppierten Index, der im Eigenschaftenbereich der grafischen und XML-Showplans 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: Änderungen an gruppierten Indizes können sich auf nicht gruppierte Indizes auswirken. Clustered Index Update ist ein logischer und physischer Operator. |
![]() |
Zuklappen | 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 eine Gruppe nach Prädikat, die 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 oder ViewNonClustered) wird in der IndexKind-Eigenschaft im XML-Showplan angegeben. Das SeekPredicate-Element wird für ein Columnstore-Index Delete nicht unterstützt. Zu löschende Zeilen werden von einem untergeordneten Operator gelesen. Columnstore Index Delete ist ein physischer Operator. |
![]() |
Columnstore-Index Insert | 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 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. Hinweis: Änderungen an gruppierten Indizes können sich auf nicht gruppierte Indizes auswirken. Columnstore-Index Insert ist ein physischer Operator. |
![]() |
Columnstore-Index Merge | 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 tatsächliche Vorgang hängt vom Laufzeitwert der ActionColumn-Eigenschaft ab. Hinweis: Änderungen an gruppierten Indizes können sich auf nicht gruppierte Indizes auswirken. Columnstore-Index Merge ist ein physischer Operator. |
![]() |
Columnstore-Indexscan | 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 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 die partitionierte Spalte in einem Abfrageprädikat enthalten ist, kann die Partitionseliminierung die Anzahl der zu überprüfenden 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 oder ViewNonClustered) wird in der IndexKind-Eigenschaft im XML-Showplan angegeben. Das SeekPredicate-Element wird für ein Columnstore-Index Update 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.Hinweis: Änderungen an gruppierten Indizes können sich auf nicht gruppierte Indizes auswirken. 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 Fälle ist ein Filterprädikat oder 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ä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. Die Anzahl der Ausführungen in der von SET STATISTICS PROFILE generierten Showplanausgabe ist gleich der Summe der erneuten Bindungen und Zurückspulvorgänge in den von SET STATISTICS XML generierten Showplans.Compute Scalar ist sowohl ein logischer als auch physischer Operator. |
![]() |
Concatenation | 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. |
![]() |
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. Der Konstantenscan kann eine oder mehrere Zeilen mit null oder mehr Spalten generieren. |
![]() |
Konvertieren | Der Convert -Operator wandelt einen skalaren Datentyp in einen anderen um. Convert ist ein Sprachelement. |
![]() |
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. |
![]() |
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 | 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. |
![]() |
Deleted Scan | In Triggern durchsucht der Gelöschter Scan-Operator die gelöschte Tabelle. |
Keine | Distinct | Mithilfe des Distinct -Operators werden Duplikate aus einem Rowset oder aus einer Sammlung von Werten entfernt. Distinct ist ein logischer Operator. |
Keine | 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 Bereichs Eigenschaften angegeben sind. Distinct Sort ist ein logischer Operator. |
![]() |
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 der Bereich Eigenschaften ein Partitionsspalten-Prädikat und die Partitionierungsspalten. Distribute Streams ist ein logischer Operator. |
![]() |
Dynamisch | Der Dynamic -Operator verwendet einen Cursor, der alle von anderen vorgenommenen Änderungen wahrnimmt. |
![]() |
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 | Der Fetch Query -Operator ruft Zeilen ab, wenn eine Abrufoperation für einen Cursor ausgegeben wird. |
![]() |
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 verwenden, wenn mehr als 253 Fremdschlüsselverweise auf dem gleichen primären oder eindeutigen Schlüssel vorhanden sind. Die Überprüfung der Fremdschlüsselverweise ist ein logischer und physischer Operator. |
![]() |
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 | 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 der Bereich Eigenschaftens ein order by-Prädikat und die Namen der zu sortierenden Spalten. Gather Streams ist ein logischer Operator. |
![]() |
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 im Bereich Eigenschaften 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:() im Bereich Eigenschaften), 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. DerHash Match -Operator ist ein physischer Operator. Weitere Informationen finden Sie unter Grundlegendes zu Hashjoins. |
![]() |
Index Delete | Der Operator Index Delete löscht Zeilen aus dem nicht gruppierten Index, der Bereich Eigenschaften angegeben ist. Index Delete ist ein physischer Operator. |
![]() |
Index Insert | 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. |
![]() |
Index Scan | 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. 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). Wenn der Bereich Eigenschaften 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 die Datenbank-Engine 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. |
![]() |
Index Spool | Der Index-Spool-Operator enthält ein seek-Prädikat im Bereich Eigenschaften. 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. Index Spool ist ein physischer Operator. |
![]() |
Index Update | 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. |
![]() |
Inner Join | Der Inner Join-Operator gibt alle Zeilen zurück, die das Joinprädikat der ersten (oberen) Eingabe mit der zweiten (unteren) Eingabe erfüllen. Innerer 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. |
![]() |
Inserted 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 eine Fehlerbedingung an. |
![]() |
Key Lookup | Der Key Lookup -Operator stellt eine Lesezeichensuche für eine Tabelle mit einem gruppierten Index dar. Der Bereich Eigenschaften 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 im Bereich Eigenschaften auftritt, wurde vom Abfrageprozessor ermittelt, dass Lesezeichen im gruppierten Index am besten 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 | Der Keyset-Operator verwendet einen Cursor, für den Aktualisierungen sichtbar sind, jedoch keine von anderen vorgenommenen Einfügungen. |
![]() |
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 eine Fehlerbedingung 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 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. |
Keine | 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 im Bereich Eigenschaften vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar. Left Anti Semi Join ist ein logischer Operator. |
Keine | Left Outer Join | 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 | Left Semi Join | 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. |
![]() |
Log Row Scan | Der Log Row Scan -Operator scannt das Transaktionsprotokoll. Log Row Scan ist sowohl ein logischer als auch ein physischer Operator. |
![]() |
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 vor einem oder mehreren Compute Scalar-Operatoren, die wiederum über Constant Scan-Operatoren erscheinen, welche die von diesem Operator (als Spalten in einer Zeile dargestellten) zu mischenden Intervalle aufbauen. Merge Interval ist sowohl ein logischer als auch physischer Operator. |
![]() |
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. 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 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. BeiMerge Join handelt es sich um einen physischen Operator. Weitere Informationen finden Sie unter Grundlegendes zu Zusammenführungsjoins. |
![]() |
Nested Loops | 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. Joins geschachtelter Schleifen 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 auf dem Index über die innere Eingabe zu verbessern. Alle Zeilen, die das (optionale) Prädikat im Bereich Eigenschaften erfüllen, werden auf der Grundlage der ausgeführten logischen Operation als anwendbar zurückgegeben. Wenn das OPTIMIZED -Attribut auf True festgelegt wird, bedeutet dies, dass ein optimierter Join geschachtelter Schleifen (oder eine Sortierung im Batchmodus) verwendet wird.Nested Loops ist ein physischer Operator. Weitere Informationen finden Sie unter Grundlegendes zu Joins geschachtelter Schleifen. |
Keine | Online Index Insert | 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. Außerdem können der Bereich Eigenschaften ein order by-Prädikat enthalten, das durch Auflisten der Spalten die Sortierreihenfolge bei der Partitionierung beibehält. 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 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. |
Keine | 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 Teilaggregation implementiert. Partial Aggregate ist ein logischer Operator. |
![]() |
Population Query | Der Population Query -Operator füllt die Arbeitstabelle eines Cursors auf, wenn der Cursor geöffnet wird. |
![]() |
Refresh Query | Der Refresh Query -Operator ruft aktuelle Daten für die Zeilen im Fetchpuffer ab. |
![]() |
Remote Delete | 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. |
![]() |
Remote Index Seek | 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 Insert | Der Remote Insert -Operator fügt die Eingabezeilen in ein Remoteobjekt ein. Remote Insert ist ein logischer und physischer Operator. |
![]() |
Remote Query | 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. |
![]() |
Remote Scan | 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. |
![]() |
Remote Update | Der Remote Update -Operator aktualisiert die Eingabezeilen in einem Remoteobjekt. Remote Update ist ein logischer und physischer Operator. |
![]() |
Repartition Streams | Der Repartition Streams-Operator (oder Exchange-Iterator) verarbeitet und generiert 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 Lookup | RID Lookup ist ein Bookmark Lookup für einen Heap, der eine bereitgestellte Zeilen-ID (RID) verwendet. 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 Lookup wird stets durch eine NESTED LOOP JOIN -Anweisung begleitet.RID Lookup ist ein physischer Operator. Weitere Informationen zur Lesezeichensuche finden Sie unter Read Committed und Lesezeichensuche. |
Keine | 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 im Bereich Eigenschaften erfüllt wird (bei fehlendem Prädikat sind alle Zeilen übereinstimmende Zeilen). Right Anti Semi Join ist ein logischer Operator. |
Keine | 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. 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 | 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 im Bereich Eigenschaften vorhanden ist, stellt jede Zeile eine übereinstimmende Zeile dar. Right Semi Join ist ein logischer Operator. |
![]() |
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. BeimRow Count Spool -Operator handelt es sich um einen physischen Operator. |
Keine | 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 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. Anschließend gibt der Operator ein Segment nach dem anderen aus. Segment ist ein physischer und logischer Operator. |
![]() |
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 als Argumente im Operator Sequence Project angezeigt. Sequence Project ist ein logischer und physischer Operator. |
![]() |
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 sowohl ein logischer als auch physischer Operator. |
![]() |
Momentaufnahme | Mit dem Snapshot -Operator wird ein Cursor erstellt, der von anderen vorgenommene Änderungen nicht wahrnimmt. |
![]() |
Sort | 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. |
![]() |
Teilen | 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 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 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. 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 | 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. |
![]() |
Table Insert | 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. |
![]() |
Table Merge | 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. |
![]() |
Table Scan | 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 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 | 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. |
![]() |
Table-valued Function | 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 Sort | Top N Sort ähnelt dem Sort -Iterator. Es werden allerdings nur die ersten N benötigt, und nicht das gesamte Resultset. 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. - 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.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 | Mithilfe des Update -Operators wird jede Zeile mit der entsprechenden Eingabe in das Objekt aktualisiert, das im Bereich Eigenschaften des Abfrageausführungsplans angegeben ist. Update ist ein logischer Operator. Der physische Operator ist Table Update, Index Updateoder Clustered Index Update. |
![]() |
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 sowohl ein logischer als auch physischer Operator. |
Hinweis
In der SQL Server-Dokumentation wird der Begriff „B-Struktur“ im Allgemeinen in Bezug auf Indizes verwendet. In Zeilenspeicherindizes implementiert SQL Server eine B+-Struktur. Dies gilt nicht für Columnstore-Indizes oder In-Memory-Datenspeicher. Weitere Informationen finden Sie im Leitfaden zur Architektur und zum Entwerfen von SQL Server- und Azure SQL-Indizes.