Schritte zur Ausführung des Plans
Jeder Schritt des Ausführungsplans gibt eine Reihe von Zeilen zurück, die entweder im nächsten Schritt verwendet oder im letzten Schritt an den Benutzer oder die Anwendung zurückgegeben werden, der die SQL-Anweisung ausgegeben hat. Der von jedem Schritt zurückgegebene Satz von Zeilen wird als Zeilenquelle bezeichnet. Abbildung 5-1 Ein Baumdiagramm zeigt den Datenfluss von einem Spaziergang zum anderen. Die Nummerierung jedes Schritts spiegelt die Reihenfolge wider, in der die Schritte angezeigt werden, wenn Sie den Ausführungsplan anzeigen (wie Sie den Ausführungsplan anzeigen, wird kurz erklärt). Im Allgemeinen ist dies nicht die Reihenfolge, in der die einzelnen Schritte ausgeführt werden. Jeder Schritt des Ausführungsplans ruft entweder Zeilen aus der Datenbank ab oder empfängt Zeilendaten als Eingabe von einer oder mehreren Zeilenquellen:
Die durch rote Kästchen gekennzeichneten Schritte rufen Daten physisch aus den Datendateien in der Datenbank ab. Dieser Schritt wird als Zugriffspfad bezeichnet. Die in Oracle verwendbaren Zugriffspfade werden später im Detail vorgestellt:
In den Schritten 3 und 6 werden alle Zeilen aus der EMP-Tabelle bzw. der SALGRADE-Tabelle gelesen.
Schritt 5 sucht nach jedem von Schritt 3 zurückgegebenen DEPTNO-Wert im PK_DEPTNO-Index. Es ermittelt die ROWIDs der Zeilen, die mit der DEPT-Tabelle verknüpft sind.
Schritt 4 ruft aus der DEPT-Tabelle diejenigen Zeilen ab, deren ROWID in Schritt 5 zurückgegeben wurde.
Die durch das schwarze Textfeld angezeigten Schritte wirken sich auf die Zeilenquelle aus, z. B. Zuordnung, Sortierung oder Filterung zwischen zwei Tabellen. Detaillierte Einführungen finden Sie später:
Schritt 2 implementiert verschachtelte Schleifenoperationen (entspricht verschachtelten Schleifen in C-Anweisungen), empfängt die Zeilenquellen aus den Schritten 3 und 4 und vergleicht jede Zeile aus der Quelle in Schritt 3 mit ihrer Zeilenquelle in Schritt 4. Entsprechende Zeilen werden miteinander verkettet und Die resultierenden Zeilen werden an Schritt 1 zurückgegeben.
Schritt 1 schließt einen Filtervorgang ab. Es empfängt die Zeilenquellen aus Schritt 2 und 6, entfernt diejenigen Zeilen aus Schritt 2, denen entsprechende Zeilen in Schritt 6 vorliegen, und gibt die verbleibenden Zeilen aus Schritt 2 an den Aussteller zurück.
Implementieren Sie die Reihenfolge der Schritte des Ausführungsplans
Die Schritte im Ausführungsplan werden nicht in der Reihenfolge implementiert, in der sie nummeriert sind: Oracle implementiert zuerst die Schritte, die als Blätter im Baumstrukturdiagramm von Abbildung 5-1 erscheinen (z. B. Schritte 3, 5 und 6). Die von jedem Schritt zurückgegebenen Zeilen werden als Zeilenquellen des nächsten Schritts bezeichnet. Oracle implementiert dann den übergeordneten Schritt.
Um beispielsweise die Anweisung in Abbildung 5-1 auszuführen, implementiert Oracle diese Schritte in der folgenden Reihenfolge:
Zunächst implementiert Oracle Schritt 3 und gibt die Ergebniszeilen Zeile für Zeile an Schritt 2 zurück.
Für jede in Schritt 3 zurückgegebene Zeile implementiert Oracle die folgenden Schritte:
– Oracle implementiert Schritt 5 und gibt die Ergebnis-ROWID an Schritt 4 zurück.
– Oracle implementiert Schritt 4 und gibt die Ergebniszeile an Schritt 2 zurück.
– Oracle implementiert Schritt 2 und akzeptiert eine Zeile aus Schritt 3 und eine Zeile aus Schritt 4 und kehrt zurück
Geben Sie Schritt 1 eine Zeile.
– Oracle implementiert Schritt 6. Wenn eine Ergebniszeile vorhanden ist, kehren Sie zu Schritt 1 zurück.
– Oracle implementiert Schritt 1. Wenn eine Zeile aus Schritt 6 zurückgegeben wird, gibt Oracle die Zeile aus Schritt 2 an zurück
Der Benutzer, der die SQL-Anweisung ausgegeben hat.
Beachten Sie, dass Oracle die Schritte 5, 4, 2 und 6 einmal für jede von Schritt 3 zurückgegebene Zeile ausführt. Viele übergeordnete Schritte erfordern nur eine einzige Zeile ihrer untergeordneten Schritte, bevor sie ausgeführt werden können. Bei einem solchen übergeordneten Schritt wird der übergeordnete Schritt (und möglicherweise der Rest des Ausführungsplans) implementiert, sobald eine einzelne Zeile vom untergeordneten Schritt zurückgegeben wurde. Wenn der übergeordnete Schritt des übergeordneten Schritts auch über eine einzelne Zeilenrückgabe aktiviert werden kann, wird er auch ausgeführt. Daher können Ausführungen im Baum verkettet werden, möglicherweise einschließlich des Rests des Ausführungsplans. Für solche Vorgänge können Sie first_rows als Optimierungsziel verwenden, um schnell auf Benutzeranfragen zu reagieren.
Für jede Zeile, die nacheinander von einem untergeordneten Schritt abgerufen wird, implementiert Oracle den übergeordneten Schritt und alle verketteten Schritte einmal. Zu den übergeordneten Schritten, die für jede von einem untergeordneten Schritt zurückgegebene Zeile ausgelöst werden, gehören Tabellenzugriff, Indexzugriff, Nested-Loop-Joins und Filter.
Für einige übergeordnete Schritte sind alle Zeilen von untergeordneten Schritten erforderlich, bevor sie implementiert werden können. Bei einem solchen übergeordneten Schritt kann Oracle den übergeordneten Schritt erst implementieren, wenn alle Zeilen vom untergeordneten Schritt zurückgegeben wurden. Zu diesen übergeordneten Schritten gehören „Sortieren“, „Sortieren-Zusammenführen-Join“, „Gruppenfunktion“ und „Summe“. Für eine solche Operation kann first_rows nicht als Optimierungsziel verwendet werden, aber all_rows kann als Optimierungsziel verwendet werden, damit diese Art von Operation die geringsten Ressourcen verbraucht.
Manchmal erfolgt die Ausführung einer Anweisung nicht wie oben erwähnt Schritt für Schritt, sondern kann parallel ausgeführt werden. In einer tatsächlichen Umgebung können beispielsweise die Schritte 3, 5 und 4 parallel ausgeführt werden, um eine bessere Effizienz zu erzielen. Aus dem obigen Baumdiagramm ist es schwierig, die Reihenfolge zu erkennen, in der die einzelnen Operationen ausgeführt werden. Durch eine andere Form des von ORACLE generierten Ausführungsplans ist es jedoch leicht zu erkennen, welche Operation zuerst und welche später ausgeführt wird Der Ausführungsplan ist das, was wir wirklich brauchen, und wird später im Detail erläutert.
Dieser Artikel stammt aus dem CSDN-Blog. Bitte geben Sie beim Nachdruck die Quelle an: http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044799.aspx
-