- Löschen
Dieser Operator stellt eine erforderliche Operation dar. Wenn Sie den Zugriffsplanaufwand verbessern möchten, sollten Sie bevorzugt andere Knoten verwenden (wie Such- und Joinknoten), bei denen die Gruppe der löschenden Zeilen definiert wird.
Vorschlag zur Leistungsverbesserung: Wenn Sie alle Zeilen aus einer Tabelle löschen, sollten Sie die Anweisung DROP TABLE oder den Befehl LOAD REPLACE verwenden.
- Benutzerdefinierte Indexsuche
- Beim Durchsuchen werden die verschiedenen Start-/Stoppbedingungen der Bereichsgenerierungsfunktion verwendet, die vom Benutzer bereitgestellt wird. Mit dieser Operation wird die Gruppe der qualifizierenden Zeilen eingegrenzt, bevor das Optimierungsprogramm (basierend auf Vergleichselementen) auf die Basistabelle zugreift.
Vorschlag zur Leistungsverbesserung:- Im Laufe der Zeit kann ein Index aufgrund von Datenbankaktualisierungen fragmentiert werden, sodass mehr Indexseiten als erforderlich vorhanden sind. Dies kann durch Löschen und erneutes Erstellen des Index oder durch Reorganisieren des Index korrigiert werden.
- Sind die Statistikdaten nicht aktuell, aktualisieren Sie diese mit dem Befehl RUNSTATS.
- Abrufen
- Dieser Operator stellt den Abruf von Spalten aus einer Tabelle mithilfe einer bestimmten Zeilenkennung (RID - Row Identifier) dar.
- Daten filtern
- Dieser Operator stellt die Anwendung von Residuumvergleichselementen dar, sodass die Daten basierend auf den Kriterien gefiltert werden, die von den Vergleichselementen bereitgestellt werden.
- Tabellenzeilen generieren
- Dieser Operator stellt eine integrierte Funktion dar, die eine Tabelle aus Zeilen ohne Eingabe aus Tabellen, Indizes oder Operatoren generiert.
- Gruppieren nach
- Dieser Operator stellt die Gruppierung von Zeilen nach gemeinsamen Werten der angegebenen Spalten oder Funktionen dar. Diese Operation ist erforderlich, um eine Gruppe von Werten zu produzieren oder Gruppenfunktionen auszuwerten. Auch wenn keine Gruppierungsspalten (Spalten GROUP BY) angegeben sind, kann dieser Operator verwendet werden, sofern die SELECT-Liste Aggregatfunktionen enthält. Deren Vorhandensein gibt an, dass das Optimierungsprogramm bei dieser Spaltenberechnung die vollständige Tabelle als zusammenhängende Gruppe behandeln soll.
- Vorschlag zur Leistungsverbesserung:
- Wenn Sie den Zugriffsplanaufwand verbessern möchten, sollten Sie bevorzugt andere Knoten verwenden (wie Such- und Joinknoten), bei denen die zu gruppierenden Zeilen definiert werden.
- Mithilfe der folgenden Maßnahmen lässt sich gegebenenfalls die Leistung einer Anweisung SELECT verbessern, die eine einzelne Aggregatfunktion, aber keine Klausel GROUP BY enthält:
- Erstellen Sie bei einer Aggregatfunktion MIN(C) einen aufsteigenden Index für C.
- Erstellen Sie bei einer Aggregatfunktion MAX(C) einen absteigenden Index für C.
- Hash-Join
- Dieser Operator stellt einen Hash-Join dar, für den die qualifizierenden Zeilen aus Tabellen hashverschlüsselt werden, um einen direkten Join zu ermöglichen, ohne den Inhalt der Tabellen zuvor in eine bestimmte Reihenfolge zu bringen.
Ein Join ist erforderlich, wenn in einer Klausel FROM auf mehrere Tabellen verwiesen wird. Ein Hash-Join ist möglich, wenn ein Joinvergleichselement Spalten aus zwei verschiedenen Tabellen gleichsetzt. Die Joinvergleichselemente müssen exakt den gleichen Datentyp aufweisen.
Hash-Joins können sich auch aus einer neu erstellten Unterabfrage ergeben, wie dies bei Joins mit Verschachtelungsschleife der Fall ist.
Bei einem Hash-Join müssen die Eingabetabellen nicht in einer bestimmten Reihenfolge vorliegen. Der Join wird durchgeführt, indem die innere Tabelle des Hash-Joins durchsucht und durch Hashing der Joinspaltenwerte eine Suchtabelle generiert wird. Anschließend wird die äußere Tabelle gelesen, wobei ein Hashing der Joinspaltenwerte erfolgt und anhand der Suchtabelle, die für die innere Tabelle generiert wurde, eine Überprüfung vorgenommen wird.
Vorschlag zur Leistungsverbesserung:
- Verwenden Sie lokale Vergleichselemente, also Vergleichselemente, die auf eine Tabelle verweisen, um die Anzahl der zu verknüpfenden Zeilen zu verringern.
- Vergrößern Sie den Sortierspeicher so, dass er die Hashsuchtabelle aufnehmen kann.
- Sind die Statistikdaten nicht aktuell, aktualisieren Sie diese mit dem Befehl RUNSTATS.
- Einfügen
Dieser Operator stellt eine erforderliche Operation dar. Wenn Sie den Zugriffsplanaufwand verbessern möchten, sollten Sie bevorzugt andere Knoten verwenden (wie Such- und Joinknoten), bei denen die Gruppe der löschenden Zeilen definiert wird.
- Indexschnittpunkt
- Dieser Operator stellt die logische Verknüpfung über AND der Ergebnisse aus Mehrfachindexsuchen mithilfe von Verfahren zur dynamischen Bitzuordnung dar. Die Operation ermöglicht die Anwendung von Vergleichselementen, die über AND logisch verknüpft sind, auf mehrere Indizes, um die Zugriffe auf die zugrunde liegende Tabelle auf ein Minimum zu reduzieren.
Diese Operation wird zu folgenden Zwecken verwendet:
- Eingrenzen der Gruppe von Zeilen vor dem Zugriff auf die Basistabelle
- Logisches Verknüpfen über AND von Vergleichselementen, die auf mehrere Indizes angewendet werden
- Logisches Verknüpfen über AND der Ergebnisse aus Semi-Joins, die in Star-Joins verwendet werden
Vorschläge zur Leistungsverbesserung: - Im Laufe der Zeit kann ein Index aufgrund von Datenbankaktualisierungen fragmentiert werden, sodass mehr Indexseiten als erforderlich vorhanden sind. Dies kann durch Löschen und erneutes Erstellen des Index oder Reorganisieren des Index korrigiert werden.
- Sind die Statistikdaten nicht aktuell, aktualisieren Sie diese mit dem Befehl RUNSTATS.
- Im Allgemeinen sind Indexsuchen effektiver, wenn sie nur für wenige Zeilen zutreffen. Das Optimierungsprogramm schätzt die Anzahl der zutreffenden Zeilen mithilfe der Statistikdaten, die für die Spalten verfügbar sind, auf die in den Vergleichselementen verwiesen wird. Treten einige Werte häufiger auf als andere, muss die Verteilungsstatistik angefordert werden, indem die Klausel WITH DISTRIBUTION für den Befehl RUNSTATS verwendet wird. Das Optimierungsprogramm verwendet die Statistikdaten zur ungleichmäßigen Verteilung und kann so zwischen häufig auftretenden und seltener auftretenden Werten unterscheiden.
- Für diese Operation eignen sich am besten Einzelspaltenindizes, da hierfür Start- und Stoppschlüssel kritisch sind.
- Indexsuche
- Dieser Operator stellt das Durchsuchen eines Index dar, um einen reduzierten Datenstrom an Zeilenkennungen zu generieren. Für den Suchvorgang können optional Start- und Stoppbedingungen verwendet bzw. dieser kann sich auch auf indexierbare Vergleichselemente beziehen, die auf Spalten des Index verweisen.
Mit dieser Operation wird die Gruppe der qualifizierenden Zeilen-IDs eingegrenzt, bevor (basierend auf Vergleichselementen) auf die Basistabelle zugegriffen wird.
Vorschläge zur Leistungsverbesserung: - Im Laufe der Zeit kann ein Index aufgrund von Datenbankaktualisierungen fragmentiert werden, sodass mehr Indexseiten als erforderlich vorhanden sind. Dies kann durch Löschen und erneutes Erstellen des Index oder Reorganisieren des Index korrigiert werden.
- Wenn auf zwei oder mehr Tabellen zugegriffen wird, kann der Zugriff auf die innere Tabelle über einen Index effizienter durchgeführt werden, indem für die Joinspalte der äußeren Tabelle ein Index bereitgestellt wird.
- Sind die Statistikdaten nicht aktuell, aktualisieren Sie sie mit dem Befehl RUNSTATS.
- Im Allgemeinen sind Indexsuchen am effektivsten, wenn sie nur für wenige Zeilen-IDs zutreffen. Das Optimierungsprogramm schätzt die Anzahl der zutreffenden Zeilen-IDs mithilfe der Statistikdaten, die für die Spalten verfügbar sind, auf die in den Vergleichselementen verwiesen wird. Treten einige Werte häufiger auf als andere, muss die Verteilungsstatistik angefordert werden, indem die Klausel WITH DISTRIBUTION für den Befehl RUNSTATS verwendet wird. Das Optimierungsprogramm verwendet die Statistikdaten zur ungleichmäßigen Verteilung und kann so zwischen häufig auftretenden und seltener auftretenden Werten unterscheiden.
- Merge-Scan-Join
- Ein Mischjoin, bei dem die qualifizierten Zeilen der äußeren und inneren Tabellen in einer dem Joinvergleichselement entsprechenden Reihenfolge vorliegen müssen. Ein Mischjoin wird auch als Merge-Scan-Join bzw. Sort-Merge-Join bezeichnet.
Ein Join ist erforderlich, wenn in einer Klausel FROM auf mehrere Tabellen verwiesen wird. Ein Mischjoin ist möglich, wenn ein Joinvergleichselement vorhanden ist, das Spalten aus zwei verschiedenen Tabellen gleichsetzt. Er kann sich auch aus einer neu erstellten Unterabfrage ergeben.
Ein Mischjoin erfordert eine nach den Joinspalten sortierte Eingabe, da die Tabellen im Regelfall nur einmal durchsucht werden. Diese sortierte Eingabe wird durch Zugriff auf einen Index oder eine sortierte Tabelle erreicht.
Vorschläge zur Leistungsverbesserung: - Verwenden Sie lokale Vergleichselemente, also Vergleichselemente, die auf eine Tabelle verweisen, um die Anzahl der zu verknüpfenden Zeilen zu verringern.
- Sind die Statistikdaten nicht aktuell, aktualisieren Sie sie mit dem Befehl RUNSTATS.
- Join mit Verschachtelungsschleife
- Dieser Operator stellt einen Join mit Verschachtelungsschleife dar, der die innere Tabelle einmal für jede Zeile der äußeren Tabelle durchsucht (normalerweise mit einer Indexsuche).
Ein Join ist erforderlich, wenn in einer Klausel FROM auf mehrere Tabellen verwiesen wird. Für einen Join mit Verschachtelungsschleife ist ein Joinvergleichselement zwar nicht erforderlich, allerdings lässt sich damit in der Regel die Leistung des Joins erhöhen.
Ein Join mit Verschachtelungsschleife wird über eines der folgenden Verfahren ausgeführt:
- Durch Durchsuchen der inneren Tabelle für jede Zeile der äußeren Tabelle, auf die zugegriffen wird
- Durch Ausführen einer Indexsuche für die innere Tabelle für jede Zeile der äußeren Tabelle, auf die zugegriffen wird
Vorschläge zur Leistungsverbesserung: - Ein Join mit Verschachtelungsschleife ist im Allgemeinen effizienter, wenn für die Spalten mit Joinvergleichselementen der inneren Tabelle ein Index vorhanden ist.
Eine weitere (weniger wichtige) Methode, die Effizienz des Joins zu erhöhen, besteht darin, einen Index für die Joinspalten der äußeren Tabelle zu erstellen, damit die äußere Tabelle sortiert vorliegt.
- Sind die Statistikdaten nicht aktuell, aktualisieren Sie sie mit dem Befehl RUNSTATS.
- Rückgabe
- Dieser Operator stellt die Rückgabe von Daten aus einer Abfrage dar. Dies ist der letzte Operator im Zugriffsplan. Er zeigt die insgesamt aufgelaufenen Werte und den Aufwand für den Zugriffsplan an.
- Suche über Zeilenkennung
- Dieser Operator stellt das Durchsuchen einer Liste mit Zeilenkennungen (Row IDs; RIDs) aus mindestens einem Index dar.
Diese Operation wird in den folgenden Fällen vom Optimierungsprogramm berücksichtigt:
- Vergleichselemente sind durch Schlüsselwörter OR verbunden oder es ist ein Vergleichselement IN vorhanden
Ein als logisches Verknüpfen von Indizes über OR bezeichnetes Verfahren kann verwendet werden, bei dem Ergebnisse aus Mehrfachindexzugriffen für dieselbe Tabelle miteinander kombiniert werden.
- Bei einem Einzelindexzugriff ist die Verwendung eines Vorablesezugriffs über Listen sinnvoll, da das Sortieren der Zeilen-IDs vor dem Zugriff auf die Basiszeilen eine höhere Ein-/Ausgabeeffizienz gewährleistet.
- Abruf ferner Daten
- Dieser Operator stellt den Abruf von Daten von einer fernen Datenquelle in einem System föderierter Datenbanken dar.
- Sortieren
- Dieser Operator stellt das Sortieren der Zeilen in einer Tabelle in der Reihenfolge einer oder mehrerer der Spalten dar, wobei optional das Entfernen doppelter Einträge möglich ist.
Das Sortieren ist erforderlich, wenn kein Index vorhanden ist, der die angeforderte Reihenfolge aufweist, oder wenn das Sortieren weniger kostenintensiv als eine Indexsuche ist. Das Sortieren erfolgt gewöhnlich als letzte Operation, nachdem die erforderlichen Zeilen abgerufen wurden, oder um Daten vor einem Join oder einer Gruppierung (GROUP BY) zu sortieren.
Wenn die Anzahl Zeilen hoch ist oder die sortierten Daten nicht über eine Pipe geleitet werden können, erfordert die Operation die aufwendige Generierung von temporären Tabellen.
- Tabellensuche
- Dieser Operator stellt eine Tabellensuche (relationale Suche) dar, bei der Zeilen abgerufen werden, indem alle erforderlichen Daten direkt aus den Datenseiten gelesen werden.
Dieser Suchtyp wird vom Optimierungsprogramm in den folgenden Fällen gegenüber einer Indexsuche vorgezogen:
- Der durchsuchte Wertebereich tritt häufig auf (d. h., es muss auf den größten Teil der Tabelle zugegriffen werden).
- Es handelt sich um eine kleine Tabelle.
- Indexclustering ist gering.
- Für die Tabelle ist kein Index vorhanden.
- Temporäre Tabelle
- Dieser Operator stellt die Speicherung von Daten in einer temporären Tabelle dar, damit die Daten während einer anderen Operation gelesen werden können.
- Tabellenwarteschlange
- Dieser Operator stellt eine Tabellenwarteschlange dar, die verwendet wird, um Tabellendaten von einem Datenbankagenten an einen anderen zu übergeben, wenn mehrere Datenbankagenten eine Abfrage verarbeiten. Bei Parallelverarbeitung werden mehrere Datenbankagenten zur Verarbeitung einer Abfrage verwendet.
- Union-Verknüpfung
Dieser Operator stellt eine erforderliche Operation dar. Wenn Sie den Zugriffsplanaufwand verbessern möchten, sollten Sie bevorzugt andere Knoten verwenden (wie Such- und Joinknoten), bei denen die Gruppe der löschenden Zeilen definiert wird.
- Duplikate entfernen
- Dieser Operator stellt den Ausschluss von Zeilen dar, die doppelte Werte für angegebene Spalten haben.
- Aktualisieren
Dieser Operator stellt eine erforderliche Operation dar. Wenn Sie den Zugriffsplanaufwand verbessern möchten, sollten Sie bevorzugt andere Knoten verwenden (wie Such- und Joinknoten), bei denen die Gruppe der löschenden Zeilen definiert wird.
- Indexsuche über XML-Daten
- Dieser Operator stellt eine Bereichssuche zugehöriger Indizes über die entsprechenden XML-Daten vor dem Zugriff auf die Tabelle dar. Die Operation grenzt die Gruppe qualifizierender Zeilenkennungen und XML-Knoten-IDs ein.
Vorschläge zur Leistungsverbesserung: - Im Laufe der Zeit kann ein Index aufgrund von Datenbankaktualisierungen fragmentiert werden, sodass mehr Indexseiten als erforderlich vorhanden sind. Dies kann durch Löschen und erneutes Erstellen des Index oder Reorganisieren des Index korrigiert werden.
- Wenn auf zwei oder mehr Tabellen zugegriffen wird, kann der Zugriff auf die innere Tabelle über einen Index effizienter durchgeführt werden, indem für die Joinspalte der äußeren Tabelle ein Index bereitgestellt wird.
- Sind die Statistikdaten nicht aktuell, aktualisieren Sie sie mit dem Befehl RUNSTATS.
- Suche in XML-Dokument
- Dieser Operator stellt die Navigation von XML-Fragmenten für die Auswertung von XPath-Ausdrücken und für die Extraktion der erforderlichen Dokumentfragmente dar.
- Logisches Verknüpfen von XML-Indizes über AND
- Dieser Operator stellt die logische Verknüpfung über AND der Ergebnisse von Mehrfachindexsuchen für Index zu XML-Daten dar, mit deren Hilfe komplexe Vergleichselemente aus einer einzigen Abfrage ausgewertet werden.
Damit diese Operation verwendet werden kann, müssen folgende Bedingungen erfüllt sein:
- Es werden nur Gleichheitsvergleichselemente verwendet.
- Der Indexsuchpfad enthält keine Platzhalterzeichen.
- Alle Vergleichselemente werden für dieselbe XML-Spalte verwendet.
Wenn eine dieser Bedingungen nicht erfüllt wird, wird stattdessen die Indexschnittpunktoperation verwendet.
Vorschläge zur Leistungsverbesserung: - Im Laufe der Zeit kann ein Index aufgrund von Datenbankaktualisierungen fragmentiert werden, sodass mehr Indexseiten als erforderlich vorhanden sind. Dies kann durch Löschen und erneutes Erstellen des Index oder Reorganisieren des Index korrigiert werden.
- Sind die Statistikdaten nicht aktuell, aktualisieren Sie sie mit dem Befehl RUNSTATS.
- Im Allgemeinen sind Indexsuchen effektiver, wenn sie nur für wenige Zeilen zutreffen. Das Optimierungsprogramm schätzt die Anzahl der zutreffenden Zeilen mithilfe der Statistikdaten, die für die Spalten verfügbar sind, auf die in den Vergleichselementen verwiesen wird. Treten einige Werte häufiger auf als andere, muss die Verteilungsstatistik angefordert werden, indem die Klausel WITH DISTRIBUTION mit dem Befehl RUNSTATS verwendet wird.
Das Optimierungsprogramm verwendet die Statistikdaten zur ungleichmäßigen Verteilung und kann so zwischen häufig auftretenden und seltener auftretenden Werten unterscheiden.