Abfragen optimieren und ausführen
Sie können herausfinden, welche Abfrageoptimierungsstrategie (Plan) der Optimierer für eine beliebige Anweisung ausgewählt hat.
Es ist die Aufgabe des Optimierers, die Semantik Ihrer Abfrage zu verstehen und einen Plan zu entwerfen, der die Ergebnisse berechnet. Dieser Plan muss nicht mit der von Ihnen verwendeten Syntax übereinstimmen. Dem Optimierer steht es frei, Ihre Abfrage in ein beliebiges, semantisch gleichwertiges Format umzuschreiben.
Weitere Hinweise zu den Regeln, die Adaptive Server Anywhere beim Umschreiben Ihrer Abfrage befolgt, finden Sie unter Neuschreiben von Unterabfragen als EXISTS-Prädikate und Semantische Abfragen-Transformationen.
Hinweise zu den Methoden, die der Optimierer zum Implementieren Ihrer Abfrage benutzt, finden Sie unter Algorithmen zur Abfrageausführung.
Sie können den Plan in Interactive SQL bzw. mit den SQL-Funktionen anzeigen. Der Zugriffsplan kann in verschiedenen Formaten abgerufen werden:
Kurzer Text
Ausführlicher Text
Grafische Darstellung
Grafische Darstellung mit Statistik
UltraLite (kurz, ausführlich oder grafisch)
Sie können Pläne für SQL-Abfragen auch mit bestimmten Cursortypen erhalten.
Weitere Hinweise zum Zugriff auf den Plan finden Sie unter Auf den Plan zugreifen. Hinweise zum Lesen von Plänen finden Sie unter Textpläne und Grafische Pläne.
Nachfolgend finden Sie ein Beispiel für die Statistiken und andere Elemente, die in Zugriffsplänen angezeigt werden.
Es folgen die Abkürzungen, die in einem kurzen Plan verwendet werden, sowie die Kurzbezeichnungen in grafischen Plänen:
| Name | Kurzer Plan / Kurzbezeichnung |
|---|---|
| Hash except all | EAH |
| Hash except | EH |
| Hash group by | GrByH |
| Hash Table Scan | HTS |
| Clustered Hash (Group by) | GrByHClust |
| Hash rollup group by | GrByHR |
| Ordered group by | GrByO |
| Ordered rollup group by | GrByOR |
| Single row group by (Group by für einzelne Zeile) | GrByS |
| Indexed group by | GrByI |
| Hash distinct | DistH |
| Indexed distinct | DistI |
| Ordered distinct | DistO |
| Sort Top N | StrN |
| Hash filter | HF |
| Hash intersect all | IAH |
| Hash Intersect | IH |
| Exists join | JE |
| Nested loops semijoin (Nested Loops Semijoin) | JNLS |
| Hash exists | JHE |
| Hash not exists | JHNE |
| Hash join | JH |
| Sorted block (Sortierter Block) | SrtBl |
| Left outer hash join | JHO |
| Full outer hash join | JHFO |
| Recursive hash join | JHR |
| Left outer recursive hash join | JHRO |
| Nested block join (Join mit verschachteltem Block) | JNB |
| Left outer nested block join (Links-Outer-Join mit verschachteltem Block) | JNBO |
| Not exists join | JNE |
| Nested loops join (Nested Loops Join) | JNL |
| Left outer nested loops join (Links-Outer-Nested Loops Join) | JNLO |
| Full outer nested loops join (Vollständiger Outer-Nested Loops Join) | JNLFO |
| Merge join | JM |
| Left outer merge join | JMO |
| Full outer merge join (Vollständiger Outer-Merge-Join) | JMFO |
| Merge except | EM |
| Merge except all | EAM |
| Merge intersect | IM |
| Merge intersect all | IAM |
| Row limit (Zeilenbegrenzung) | RL |
| Row replicate | RR |
| Recursive table | RT. Im kurzen Plan ist rt<seq> |
| Recursive union | RU |
| Union all | UA |
| Table scan | Im kurzen Plan ist Tabellenname<seq>. In grafischen Plänen nur der Tabellenname. |
| Index scan | Im kurzen Plan ist Tabellenname<Indexname>. In grafischen Plänen nur der Tabellenname. |
| In-Liste | IN |
Eine Erklärung der Algorithmen finden Sie unter Algorithmen zur Abfrageausführung.
Die folgenden Statistiken sind tatsächliche, gemessene Werte.
| Statistik | Erklärung |
|---|---|
| Invocations | Wie oft eine Zeile aus der Unterstruktur angefordert wurde |
| RowsReturned | Anzahl der für den aktuellen Knoten zurückgegebenen Zeilen |
| RunTime | Geschätzte Ausführungszeit für die Unterstruktur, einschließlich der Zeit für untergeordnete Strukturen |
| CacheHits | Anzahl der erfolgreichen Lesevorgänge im Cache |
| CacheRead | Anzahl der Datenbankseiten, die im Cache nachgeschlagen wurden |
| CacheReadTable | Anzahl der Tabellenseiten, die vom Cache gelesen wurden. |
| CacheReadIndLeaf | Anzahl der Index-Blattseiten, die vom Cache gelesen wurden |
| CacheReadIndInt | Anzahl der internen Knotenseiten des Index, die vom Cache gelesen wurden |
| DiskRead | Anzahl der Seiten, die vom Plattenspeicher gelesen wurden |
| DiskReadTable | Anzahl der Tabellenseiten, die vom Plattenspeicher gelesen wurden |
| DiskReadIndLeaf | Anzahl der Indexblattseiten, die vom Plattenspeicher gelesen wurden |
| DiskReadIndInt | Anzahl der internen Knotenseiten des Index, die vom Plattenspeicher gelesen wurden |
| DiskWrite | Anzahl der Seiten, die auf den Plattenspeicher geschrieben wurden (Arbeitstabellenseiten oder geänderte Tabellenseiten) |
| IndAdd | Anzahl der Einträge, die zu Indizes hinzugefügt wurden |
| IndLookup | Anzahl der Einträge, die in Indizes nachgeschlagen wurden |
| FullCompare | Anzahl der Vergleiche, die jenseits des Hash-Werts in einem Index ausgeführt wurden |
| Statistik | Erklärung |
|---|---|
| EstRowCount | Geschätzte Anzahl der Zeilen, die vom Knoten jedesmal zurückgegeben werden, wenn er aufgerufen wird |
| AvgRowCount | Mittlere Anzahl der Zeilen, die bei jedem Aufruf zurückgegeben werden. Diese Zahl wird nicht geschätzt, sondern berechnet als RowsReturned / Invocations. Wenn dieser Wert deutlich von EstRowCount abweicht, ist eventuell die Selektivitätsschätzung schlecht. |
| EstRunTime | Geschätzte Ausführungszeit (Summe von EstDiskReadTime, EstDiskWriteTime und EstCpuTime) |
| AvgRunTime | Mittlere Ausführungszeit (gemessen) |
| EstDiskReads | Geschätzte Anzahl der Lesevorgänge von der Festplatte |
| AvgDiskReads | Mittlere Anzahl der Lesevorgänge von der Festplatte (gemessen) |
| EstDiskWrites | Geschätzte Anzahl der Schreibvorgänge auf die Festplatte |
| AvgDiskWrites | Mittlere Anzahl der Schreibvorgänge auf die Festplatte (gemessen) |
| EstDiskReadTime | Geschätzte Zeit zum Lesen von Zeilen von der Festplatte |
| EstDiskWriteTime | Geschätzte Zeit zum Schreiben von Zeilen auf die Festplatte |
| EstCpuTime | Geschätzte Prozessorzeit, die für die Ausführung erforderlich ist |
| Element | Erklärung |
|---|---|
| Optimization Goal | Legt fest, ob die Abfrageverarbeitung dahingehend optimiert wird, die erste Zeile schnell zurückzugeben, oder ob der Aufwand für die Ausgabe der vollständigen Ergebnismenge minimiert werden soll |
| Optimierungsarbeitslast | Legt fest, ob die Abfrageverarbeitung für eine Arbeitslast optimiert wird, die aus einer Mischung von Aktualisierungen und Lesevorgängen besteht, oder für eine Arbeitslast, die hauptsächlich auf Lesevorgängen basiert. |
| ANSI update constraints | Steuert den Bereich der Aktualisierungen, die zulässig sind (Optionen sind:OFF, CURSORS und STRICT). |
| Optimization level | Reserviert für spätere Verwendung |
| Select list | Liste mit Ausdrücken, die von der Abfrage ausgewählt wurden |
| Element | Erklärung |
|---|---|
| Locked tables | Liste aller gesperrten Tabellen und ihrer Isolationsstufen |
| Element | Erklärung |
|---|---|
| Tabellenname | Tatsächlicher Name der Tabelle |
| Correlation name | Alias für die Tabelle |
| Estimated rows | Geschätzte Anzahl der Zeilen in der Tabelle |
| Estimated pages | Geschätzte Anzahl der Seiten in der Tabelle |
| Estimated row size | Geschätzte Zeilengröße für die Tabelle |
| Page maps | JA, wenn eine Seitenzuordnung zum Lesen mehrerer Seiten verwendet wird |
| Element | Erklärung |
|---|---|
| Index name | Name des Indexes |
| Key type | Kann PRIMARY KEY, FOREIGN KEY, CONSTRAINT (unique constraint) oder UNIQUE (unique index) sein. Der Schlüsseltyp wird nicht angezeigt, wenn der Index ein nicht eindeutiger Sekundärindex ist. |
| Depth |
Höhe des Indexes
Weitere Hinweise finden Sie unter Tabellen- und Seitengrößen. |
| Estimated leaf pages | Geschätzte Anzahl der Blattseiten |
| Cardinality | Die Kardinalität des Indexes, wenn er sich von der geschätzten Anzahl der Zeilen unterscheidet. Dies gilt nur für Adaptive Server Anywhere-Datenbanken Version 6.0 und früher. |
| Selectivity | Geschätzte Anzahl der Zeilen, die innerhalb der Bereichsgrenzen liegen |
| Direction | FORWARD oder BACKWARD. |
| Range bounds | Bereichsgrenzen werden als eine Liste dargestellt (col_name=value) oder col_name IN [low, high] |
| Element | Erklärung |
|---|---|
| Predicate |
Die Suchbedingung, die in diesem Knoten aufgelöst wird, sowie Selektivitätsschätzungen und -Messungen
Weitere Hinweise finden Sie unter Selektivität im Plan. |
| Element | Erklärung |
|---|---|
| Build values | Geschätzte Anzahl von unterschiedlichen Werten in der Eingabe. |
| Probe values | Geschätzte Anzahl von unterschiedlichen Werten in der Eingabe beim Prüfen des Prädikats. |
| Bits | Anzahl der ausgewählten Bits zum Aufbau der Hash-Map |
| Pages | Anzahl der ausgewählten Seiten, die zum Speichern der Hash-Map erforderlich sind |
| Element | Erklärung |
|---|---|
| Union List | Die Spalten, die an einem UNION-Vorgang beteiligt sind |
| Element | Erklärung |
|---|---|
| Aggregates | Alle Aggregatfunktionen |
| Group-by list | Alle Spalten in der group by-Klausel |
| Element | Erklärung |
|---|---|
| Distinct list | Alle Spalten in der distinct-Klausel |
| Element | Erklärung |
|---|---|
| In List | Alle Ausdrücke im angegebenen Set |
| Expression SQL | Ausdrücke, die mit der Liste verglichen werden müssen |
| Element | Erklärung |
|---|---|
| Order-by | Listet alle Ausdrücke, nach denen sortiert werden soll |
| Element | Erklärung |
|---|---|
| Row limit count | Maximale Anzahl von zurückgegebenen Zeilen, wie dies mit FIRST oder TOP n angegeben wurde |
Textpläne
Grafische Pläne
Auf den Plan zugreifen
SQL Anywhere Studio 9.0.1
Copyright © 1989–2004 Sybase Inc. Teil-Copyright © 2001–2004 iAnywhere Solutions Inc. Alle Rechte vorbehalten.