Logische und physikalische Operatoren (Referenz)
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 physikalischen Operatoren besteht.
Operatoren werden als logische und physikalische Operatoren klassifiziert. Logische Operatoren beschreiben einen relationalen Abfrageverarbeitungsvorgang auf konzeptioneller Ebene. Physikalische Operatoren implementieren im Grunde den durch einen logischen Operator definierten Vorgang mithilfe einer konkreten Methode oder eines Algorithmus. Ein logischer Vorgang ist z. B. "Join", wogegen "Nested Loops Joins" ein physikalischer Operator ist.
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.Physikalische Operatoren
Physikalische Operatoren implementieren den durch logische Operatoren beschriebenen Vorgang. Jeder physikalische 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 physikalische Operatoren führen andere Arten von Vorgängen aus: Der Aggregate-Operator berechnet einen Ausdruck, der MIN, MAX, SUM, COUNT oder AVG enthält, und der Merge Join-Operator führt verschiedene Arten von logischen Verknüpfungsvorgängen aus.Über die physikalischen Operatoren werden Daten initialisiert, aufgelistet und beendet. Der physikalische Operator kann insbesondere die folgenden drei Methodenaufrufe beantworten:
Init(): Mit der Init()-Methode wird ein physikalischer Operator initialisiert und dazu angewiesen, gegebenenfalls Datenstrukturen einzurichten. Der physikalische Operator kann mehrere Init()-Aufrufe empfangen; in der Regel empfängt er jedoch nur einen.
GetNext(): Mit der GetNext()-Methode wird ein Operator angewiesen, die erste oder nächste Datenzeile abzurufen. Der physikalische Operator kann null oder mehrere GetNext()-Aufrufe empfangen.
Close(): Mit der Close()-Methode wird der physikalische Operator dazu angewiesen, einige Cleanupvorgänge auszuführen und sich selbst zu beenden. Ein physikalischer Operator empfängt nur einen Close()-Aufruf.
Die GetNext()-Methode gibt eine Datenzeile zurück, und die Anzahl der Aufrufe wird als ActualRows in der durch SET STATISTICS PROFILE ON oder SET STATISTICS XML ON erstellten Showplanausgabe angezeigt. Weitere Informationen zu diesen SET-Optionen finden Sie unter SET STATISTICS PROFILE (Transact-SQL) und SET STATISTICS XML (Transact-SQL).
Die ActualRebinds- und ActualRewinds-Zähler, die in der Showplanausgabe angezeigt werden, beziehen sich auf die Anzahl der Aufrufe der Init()-Methode. ActualRebinds entspricht 1 und ActualRewinds entspricht 0, es sei denn, ein Operator befindet sich innerhalb einer Schleifenverknüpfung. Wenn sich ein Operator innerhalb einer Schleifenverknüpfung befindet, muss die Summe der erneuten Bindungen und Zurückspulvorgänge der Anzahl der verarbeiteten Vorgänge außerhalb der Verknüpfung entsprechen. Unter 'erneuter Bindung' wird verstanden, dass sich mindestens ein korrelierter Parameter der Verknüpfung geändert hat und daher das Innere der Verknüpfung neu ausgewertet werden muss. Unter 'Zurückspulvorgang' wird verstanden, dass sich keiner der korrelierten Parameter geändert hat und das vorherige innere Resultset daher wiederverwendet werden kann.
ActualRebinds und ActualRewinds sind in der mithilfe von SET STATISTICS XML ON erstellten XML-Showplanausgabe vorhanden. Sie werden nur für die Operatoren Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool und Table-valued Function aufgefüllt. ActualRebinds und ActualRewinds können auch für den Assert- und den Filter-Operator aufgefüllt werden, wenn das StartupExpression-Attribut auf TRUE festgelegt ist.
Wenn ActualRebinds und ActualRewinds in einem XML-Showplan vorhanden sind, können sie mit EstimateRebinds und EstimateRewinds verglichen werden. Wenn sie nicht vorhanden sind, kann die geschätzte Zeilenanzahl (EstimateRows) mit der tatsächlichen Zeilenanzahl (ActualRows) verglichen werden. Beachten Sie, dass die tatsächliche grafische Showplanausgabe für tatsächliche erneute Bindungen und Zurückspulvorgänge Nullen anzeigt, wenn letztere nicht vorhanden sind. Weitere Informationen zu grafischen Showplans finden Sie unter Anzeigen von grafischen Ausführungsplänen (SQL Server Management Studio).
Ein entsprechender Zähler, ActualEndOfScans, ist verfügbar, wenn die Showplanausgabe mithilfe von SET STATISTICS XML ON erstellt wird. Wenn ein physikalischer Operator das Ende seines Datenstroms erreicht, wird dieser Zähler um 1 erhöht. Wenn ein physikalischer Operator das Ende seines Datenstroms erreicht, wird dieser Zähler um 1 erhöht. Wie bei erneuten Bindungen und Zurückspulvorgängen kann die Anzahl für das Scanende größer als 1 sein; aber nur, wenn sich der Operator innerhalb einer Schleifenverknüpfung befindet. Die Anzahl für Scanende muss kleiner oder gleich der Summe der erneuten Bindungen und Zurückspulvorgänge sein.
Physikalische Operatoren entsprechen den Ausführungsalgorithmen. Zu den physikalischen Operatoren zählen u. a. Index Scan/Seek, Nested Loop Join, Merge Join, Hash Join/Aggregation und Stream Aggregation. Physikalischen Operatoren sind Kosten zugeordnet. Bei der Ausführung einer Abfrage oder einer DML-Anweisung schließt jeder Schritt einen physikalischen Operator ein.
Zuordnen von physikalischen und logischen Operatoren
Der Abfrageoptimierer erstellt einen Abfrageplan als Struktur, die aus logischen Operatoren besteht. Nach dem Erstellen des Abfrageplans wählt der Abfrageoptimierer für jeden logischen Operator den effizientesten physikalischen Operator aus. Der Abfrageoptimierer entscheidet auf Basis der Kosten, welcher physikalischer Operator einen logischen Operator implementieren soll.
Normalerweise kann ein logischer Vorgang von mehreren physikalischen Operatoren implementiert werden. Ein physikalischer Operator kann jedoch in seltenen Fällen mehrere logische Vorgänge implementieren.
In diesem Abschnitt
In diesem Abschnitt finden Sie Beschreibungen der folgenden logischen und physikalischen Operatoren:
|