Collection Contents Zurück Weiter PDF

ASA SQL-Benutzerhandbuch

Abfragen optimieren und ausführen

Cachebenutzung von Unterabfragen und Funktionen


Wenn Adaptive Server Anywhere eine Unterabfrage verarbeitet, setzt er das Ergebnis in den Cache. Diese Zwischenspeicherung erfolgt von Anforderung zu Anforderung, wobei die im Cache abgelegten Ergebnisse nie von gleichzeitigen Anforderungen bzw. Verbindungen gemeinsam benutzt werden. Wenn Adaptive Server Anywhere die Unterabfrage für dieselbe Reihe von Korrelationswerten neu auflösen muss, kann das Ergebnis einfach aus dem Cache abgerufen werden. Auf diese Art vermeidet Adaptive Server Anywhere viele Wiederholungen und überflüssige Berechnungen. Wenn die Anforderung abgeschlossen ist (der Cursor der Abfrage ist geschlossen), gibt Adaptive Server Anywhere die im Cache abgelegten Werte frei.

Während die Verarbeitung einer Abfrage fortgesetzt wird, überwacht Adaptive Server Anywhere die Häufigkeit, mit der Unterabfragenwerte im Cache erneut verwendet werden. Wenn sich die Werte der korrelierenden Variablen selten wiederholen, muss Adaptive Server Anywhere die meisten Werte nur einmal berechnen. In diesem Fall erkennt Adaptive Server Anywhere, dass es effizienter ist, wenige mehrfach vorhandene Werte erneut zu berechnen, als zahlreiche Einträge in den Cache zu legen, die nur einmal vorkommen. Daher legt der Server den Rest der Anweisung nicht mehr im Cachespeicher ab und fährt fort, die Unterabfrage für jede einzelne Zeile im äußeren Abfragenblock neu aufzulösen.

Adaptive Server Anywhere verwendet auch keinen Cache, wenn die Größe der abhängigen Spalte mehr als 255 Byte beträgt. In diesen Fällen ist es möglicherweise sinnvoll, Ihre Abfrage umzuschreiben oder eine weitere Spalte Ihrer Tabelle hinzuzufügen, um solche Vorgänge effizienter zu machen.

Cachebenutzung für Funktionen 

Einige integrierte und benutzerdefinierte Funktionen werden auf dieselbe Art und Weise im Cache abgelegt wie die Ergebnisse von Unterabfragen. Das kann zu einer beachtlichen Verbesserung für kostenträchtige Funktionen führen, die während der Abfrageverarbeitung mit denselben Parametern aufgerufen werden. Jedoch kann dies auch bedeuten, dass eine Funktion seltener aufgerufen wird als anderenfalls zu erwarten wäre.

Damit eine Funktion im Cache abgelegt werden kann, muss sie zwei Bedingungen erfüllen:

Funktionen, die diese Bedingungen erfüllen, werden als deterministische oder idempotente Funktionen bezeichnet.

Mit wenigen Ausnahmen werden integrierte Funktionen als deterministisch behandelt. Die Funktionen RAND, NEW_ID und GET_IDENTITY werden als nicht deterministisch behandelt und ihre Ergebnisse werden nicht in den Cache aufgenommen.

Benutzerdefinierte Funktionen werden als deterministisch behandelt, wenn sie beim Erstellen nicht als NOT DETERMINISTIC definiert wurden.

Weitere Hinweise zu benutzerdefinierten Funktionen finden Sie unter CREATE FUNCTION-Anweisung.


Collection Contents Zurück Weiter PDF