Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Abfrageverarbeitung » Abfragen optimieren und ausführen

 

So funktioniert der Optimierer

Die Rolle des Optimierers besteht darin, einen effizienten Weg zum Ausführen von SQL-Anweisungen zu finden. Dazu muss der Optimierer einen Ausführungsplan für eine Abfrage festlegen. Dieser Plan umfasst Entscheidungen über die Zugriffsreihenfolge für Tabellen, die in der Abfrage referenziert werden, über die Join-Operatoren und Zugriffsmethoden für jede Tabelle sowie darüber, ob materialisierte Ansichten, die nicht in der Abfrage referenziert werden, zur Berechnung von Teilen der Abfrage benutzt werden können. Der Optimierer versucht, den besten Plan für die Ausführung der Abfrage während der Join-Enumerationsphase auszuwählen, während der mögliche Zugriffspläne für eine Abfrage generiert und die Kosten berechnet werden. Der beste Zugriffsplan ist derjenige, der nach Einschätzung des Optimierers die gewünschte Ergebnismenge in der kürzesten Zeit und mit den geringsten Kosten liefern wird. Der Optimierer ermittelt die Kosten jeder bei der Enumeration gefundenen Strategie, indem er die Anzahl der erforderlichen Lese- und Schreibvorgänge schätzt.

In Interactive SQL können Sie den besten Zugriffsplan zum Ausführen einer Abfrage anzeigen, indem Sie auf das Register Plan im Fensterausschnitt Ergebnisse klicken. Um den Detailgrad der Ansicht anzupassen, ändern Sie die Einstellungen auf dem Register Plan im Dialogfeld Optionen (zugänglich über das Menü Extras). Weitere Hinweise finden Sie unter Grafische Pläne lesen und Ausführungspläne lesen.

Die Kosten für die Rückgabe der ersten Zeile minimieren

Der Optimierer verwendet ein generisches Kostenmodell für Festplattenzugriffe, um die relativen Performance-Unterschiede zwischen wahlfreien und sequenziellen Abrufen aus der Datenbankdatei zu unterscheiden. Eine Datenbank kann auch mithilfe einer ALTER DATABASE-Anweisung für eine bestimmte Hardware-Konfiguration angepasst werden. Weitere Hinweise finden Sie unter ALTER DATABASE-Anweisung.

Standardmäßig wird die Abfrageverarbeitung so optimiert, dass die komplette Ergebnismenge schnell zurückgegeben wird. Mit der Option "optimization_goal" können Sie das Standardverhalten ändern, um die Kosten für die schnelle Rückgabe der ersten Zeile zu minimieren. Wenn die Option auf "First-row" gesetzt ist, bevorzugt der Optimierer einen Zugriffsplan, der die Zeitspanne zum Abruf der ersten Zeile der Ergebnismenge reduzieren soll, worunter möglicherweise die Gesamtabrufzeit leidet. Weitere Hinweise finden Sie unter optimization_goal-Option [Datenbank].

Semantisch äquivalente Syntax verwenden

Die meisten Befehle können unter Verwendung der SQL-Sprache auf viele Arten ausgedrückt werden. Diese Ausdrücke sind semantisch gleichwertig, wodurch sie dieselbe Aufgabe durchführen, aber sie können sich in ihrer Syntax grundlegend unterscheiden. Mit wenigen Ausnahmen entwirft der Optimierer einen geeigneten Zugriffsplan, der nur auf der Semantik der einzelnen Anweisungen aufbaut.

Syntaktische Unterschiede haben gewöhnlich keine Auswirkungen, auch wenn sie substanziell erscheinen mögen. So haben zum Beispiel Unterschiede in der Reihenfolge von Prädikaten, Tabellen und Attributen in der Abfrage keine Auswirkungen auf die Auswahl im Zugriffsplan. Auch wird der Optimierer nicht davon beeinflusst, ob eine Abfrage eine nicht materialisierte Ansicht enthält.

Die Kosten von Optimiererabfragen vermindern

Idealerweise würde der Optimierer den effizientesten Plan, der zur Verfügung steht, auswählen, doch das ist oft nicht durchführbar. Bei einer komplizierten Abfrage gibt es zahlreiche mögliche Lösungen.

Wie effizient der Optimierer auch sein mag, so benötigt doch das Analysieren der einzelnen Optionen Zeit und Ressourcen. Der Optimierer vergleicht die Kosten weiterer Optimierungen mit den Kosten, die ein Ausführen des bisher besten Plans verursachen würde. Wenn ein Plan mit relativ geringen Kosten entwickelt worden ist, stoppt der Optimierer und ermöglicht es, dass dieser Plan ausgeführt wird. Eine weitere Optimierung könnte mehr Ressourcen als das Ausführen eines bereits gefundenen Zugriffsplans verbrauchen. Sie können kontrollieren, wie viel Aufwand der Optimierer betreibt, indem Sie für die Option "optimization_level" einen hohen Wert festlegen. Weitere Hinweise finden Sie unter optimization_level-Option [Datenbank].

Bei kostenträchtigen und komplizierten Abfragen oder bei einer hohen Optimierungsebene benötigt der Optimierer mehr Zeit. Bei sehr kostenträchtigen Abfragen dauert die Ausführung möglicherweise so lange, dass eine Verzögerung feststellbar ist.


Optimiererschätzungen und Spaltenstatistiken
Performance automatisch optimieren
Grundlegende Annahmen des Optimierers
Prädikate in Abfragen verwenden
Kostenbasierte Optimierung mit MIN- und MAX-Funktionen
Planzwischenspeicherung