Anmelden

View Full Version : SQL / Select auf LF / Optimizer



harkne
23-10-15, 09:07
Hallo zusammen,

ich habe mal eine Wissensfrage.

Wenn ich beim SELECT eine Logische Datei anstatt einer Physischen Datei angebe. Kann ich dann davon ausgehen, dass sich das System so verhält als hätte ich einen View angegeben. Die Datenselektion die über die logische Datei ausgewählt wurde über Compare bleiben erhalten. Ich kann aber die Sortierung (was das auch für immer einen Sinn macht) ändern und der Optimizer schnappt sich dann nicht zufällig eine andere logische Datei die die Selektionskriterien nicht mehr hat.

Ich hoffe ihr versteht was ich meine

Viele Grüße Harkne

Fuerchau
23-10-15, 09:12
Eine Select auf eine LF wirkt tatsächlich wie ein Select auf eine View.
D.h., dass der Optimizer sich die PF sucht.
Der SQL wird in der Where-Klausel um die Select/Omit der LF erweitert.
Anschließend sucht sich der Optimizier einen oder auch mehrere Indizes aus, die zur Where und/oder der Order-By-Klausel passen.

Bis zu irgend einem Release (V7) wurden LF's mit Select/Omit ignoriert. Wenn kein passender Index da ist wird halt ein Tablescan durchgeführt.

Seit (V7?) gibt es ja inzwischen "calculated" Indizes, so dass auch Select/Omit-LF's berücksichtigt werden können.
Allerdings muss man hierfür in seiner Where-Klausel die Select/Omit-Definition genau wiederholen.

B.Hauser
23-10-15, 09:36
Wird eine DDS beschriebene logische Datei in einem SELECT-Statement angegeben, wird das SELECT-Statement muss die DDS-Beschreibung ananlysiert und im Anschluss das SELECT-Statement neu geschrieben werden. Aus der DDS-Beschreibung werden die Feld-Auswahl, Join-Anweisungen und Select/Omit-Anweisungen übernommen. Key-Informationen werden ingoriert.
Die eigentliche Optimierung beginnt erst nachdem das SELECT-Statement überarbeitet wurde. Bei der Optimierung werden dann alle Zugriffswege (in SQL Indices, DDS logischen Dateien und in Key Constraints) bewertet.
Vor Release 7.1 TR6 konnte diese DDS-Analyse nur von der alten Query Engine (CQE) durchgeführt werden, d.h. alle Abfragen mit Zugriff auf LFs wurden an die CQE reroutet.

Die Erweiterungen (neue Key-Spalten / Where-Bedingungen) waren in Release 6.1 in erster Linie für native I/O. Erst nach und nach "lernt" der Optimizer diese SQL Indices auch "richtig" zu nutzen, d.h. nicht nur die Key-Informationen zu verwenden.

Birgitta