Mit der Join-Eliminierung durch Neuschreibungsoptimierung wird der Join-Grad der Abfrage, sofern möglich, durch Eliminierung von Tabellen aus der Abfrage reduziert. Normalerweise wird diese Optimierung auf Inner-Joins angewendet, die als Primärschlüssel-Fremdschlüssel-Joins oder als Primärschlüssel-Primärschlüssel-Joins definiert sind. Die Optimierung durch Join-Eliminierung kann auch auf Tabellen angewendet werden, die in Outer-Joins benutzt werden, obwohl die Bedingungen, unter denen die Optimierung möglich ist, sehr viel komplexer sind.
Die Optimierung eliminiert keine Tabellen, die mit UPDATE oder DELETE WHERE CURRENT aktualisierbar sind, auch dann nicht, wenn die Eliminierung richtig wäre. Dies kann sich negativ auf die Performance der Abfrage auswirken. Wenn die Abfrage jedoch nur zum Lesen dient, können Sie in der SELECT-Anweisung FOR READ ONLY angeben, um sicherzustellen, dass Join-Eliminierungen durchgeführt werden. Beachten Sie, dass Tabellen, die in Unterabfragen oder in verschachtelten abgeleiteten Tabellen erscheinen, nicht aktualisierbar sind, auch dann nicht, wenn die Tabellen im Hauptabfrageblock aktualisierbar sind.
Zusammengefasst gibt es drei Hauptkategorien von Joins, auf die diese Neuschreibungsoptimierung angewendet werden kann:
Der Join ist ein Primärschlüssel-Fremdschlüssel-Join und in der Abfrage werden lediglich Primärschlüsselspalten aus der Primärtabelle referenziert. In diesem Fall wird die Primärschlüsseltabelle eliminiert, falls sie nicht aktualisierbar ist.
Der Join ist ein Primärschlüssel-Primärschlüssel-Join zwischen zwei Instanzen in derselben Tabelle. In diesem Fall wird eine der Tabellen eliminiert, falls sie nicht aktualisierbar ist.
Der Join ist ein Outer-Join und der Nullwert-liefernde Tabellenausdruck hat folgende Eigenschaften:
Der Nullwert-liefernde Tabellenausdruck liefert höchstens eine Zeile für jede Zeile der bewahrten Seite des Outer-Joins.
Keiner der Ausdrücke, die von dem Nullwert-liefernden Ausdruck erstellt werden, wird im Rest der Abfrage nach dem Outer-Join benötigt.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |