Fast alle Anweisungen durchlaufen alle Abfrageverarbeitungsphasen. Es gibt allerdings zwei Ausnahmen: Abfragen, die von der Planzwischenspeicherung profitieren (Abfragen, die bereits vom Datenbankserver im Cache abgelegt wurden), und Bypass-Abfragen.
Planzwischenspeicherung Bei Abfragen innerhalb von gespeicherten Prozeduren und benutzerdefinierten Funktionen legt der Datenbankserver die Ausführungspläne eventuell im Cache ab, sodass sie wiederverwendet werden können. Für diese Abfrageklasse wird der Abfrageausführungsplan nach der Ausführung im Cache abgelegt. Bei der nächsten Ausführung der Abfrage wird der Plan abgerufen und alle Phasen bis zur Ausführung werden übersprungen. Weitere Hinweise finden Sie unter Planzwischenspeicherung.
Bypass-Abfragen Bypass-Abfragen sind eine Unterklasse der einfachen Abfragen, die bestimmte Merkmale haben, an denen der Datenbankserver erkennt, dass sie für ein Umgehen des Optimierers in Frage kommen. Ein Umgehen der Optimierung kann die erforderliche Zeit zum Erstellen eines Ausführungsplans vermindern.
Wenn eine Abfrage als Bypass-Abfrage erkannt wird, wird eine heuristische Optimierung statt einer kostenbasierten Optimierung verwendet. Dabei werden die semantischen Transformations- und die Optimierungsphase übergangen und der Abfrageausführungsplan wird direkt aus der Darstellung des Parse-Baums der Abfrage erstellt.
Eine einfache Abfrage ist eine SELECT-, INSERT-, DELETE- oder UPDATE-Anweisung in einem einzelnen Abfrageblock und den folgenden Merkmalen:
Der Abfrageblock enthält keine Unterabfragen oder zusätzliche Abfrageblöcke wie z.B. UNION, EXCEPT und allgemeine Tabellenausdrücke.
Der Abfrageblock referenziert eine einzige Basistabelle oder materialisierte Ansicht.
Der Abfrageblock kann die TOP N-, FIRST-, ORDER BY- oder DISTINCT-Klauseln enthalten.
Der Abfrageblock kann auch Aggregatfunktionen ohne GROUP BY- oder HAVING-Klauseln enthalten.
Der Abfrageblock enthält keine Fensterfunktionen.
Die Abfrageblock-Ausdrücke enthalten nicht NUMBER, IDENTITY oder Unterabfragen.
Die für die Basistabelle festgelegten Integritätsregeln sind einfache Ausdrücke.
Eine komplexe Anweisung kann nach der semantischen Transformationsphase in eine einfache Anweisung umgewandelt werden. Wenn dies passiert, kann die Abfrage vom Optimierer-Bypass abgearbeitet oder ihr Plan vom SQL Anywhere-Server im Cache abgelegt werden.
Sie können erzwingen, dass Abfragen, die für die Planzwischenspeicherung oder für das Umgehen des Optimierers geeignet wären, vom SQL Anywhere-Optimierer abgearbeitet werden. Um dies zu tun, verwenden Sie die FORCE OPTIMIZATION-Klausel mit einer SQL-Anweisung.
Sie können auch erzwingen, dass eine Anweisung den Optimierer umgeht. Um dies zu tun, verwenden Sie die FORCE NO OPTIMIZATION-Klausel in der Anweisung. Wenn die Anweisung zu komplex ist, um den Optimierer zu umgehen - möglicherweise auf Grund von Datenbankoptionseinstellungen oder Merkmalen des Schemas oder der Abfrage -, schlägt die Abfrage fehl und ein Fehler wird zurückgegeben.
Die Klauseln FORCE OPTIMIZATION und FORCE NO OPTIMIZATION sind in der OPTION-Klausel der folgenden Anweisungen zulässig:
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |