Wenn SQL Anywhere eine Unterabfrage verarbeitet, stellt er das Ergebnis in den Cache. Dieses Caching erfolgt pro Anforderung, wobei die im Cache abgelegten Ergebnisse nie von gleichzeitigen Anforderungen bzw. Verbindungen gemeinsam benutzt werden. Wenn SQL Anywhere die Unterabfrage für dieselbe Menge von Korrelationswerten neu auflösen muss, kann das Ergebnis einfach aus dem Cache abgerufen werden. Auf diese Art vermeidet SQL Anywhere viele Wiederholungen und überflüssige Berechnungen. Wenn die Anforderung abgeschlossen ist (der Cursor der Abfrage ist geschlossen), gibt SQL Anywhere die im Cache abgelegten Werte frei.
Während die Verarbeitung einer Abfrage fortgesetzt wird, überwacht SQL Anywhere die Häufigkeit, mit der Unterabfragenwerte im Cache wieder verwendet werden. Wenn sich die Werte der korrelierenden Variablen selten wiederholen, muss SQL Anywhere die meisten Werte nur einmal berechnen. In diesem Fall erkennt SQL 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 Datenbankserver die Unterabfrage für den Rest der Anweisung nicht mehr im Cachespeicher ab und fährt fort, die Unterabfrage für jede einzelne Zeile im äußeren Abfrageblock neu aufzulösen.
SQL 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.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |