Anmelden

View Full Version : SQL View mit Index/Key



malzusrex
19-10-16, 08:25
Hallo Gemeinde,

bei einer DDS-Beschriebenen Logischen Datei kann ich ja einen Key angeben und gleichzeitig Sätze aus der PF selektieren. Bekommt man sowas auch mit einer SQL-View hin?

PF-File


R RECORD
FELD1 3A
FELD2 10A
K FELD1


LF-File


R RECORD PFILE(TESTPF)
*
FELD1 3A
FELD2 10A
*
K FELD2
*
S FELD1 COMP(EQ 'AAA')

Oder bleibt mir dann nur die Möglichkeit im RPG mit embedded SQL zu arbeiten?

Gruß
Ronald

Robi
19-10-16, 08:36
View ist immer ohne Index,

also
create view mit ... where Feld1 = 'AAA' erstellen
create index ... aud Feld2

Wobei in der 'einfachen' Kombination würde ich den Index auf Feld1 + Feld2 legen
und den View select auf 'AAA' weglassen.
Beim Zugriff kann ich das AAA selektieren und hab weiter Möglichkeiten

Robi

Fuerchau
19-10-16, 10:56
Eine View beschreibt nur die Sicht auf Daten, ein Index erleichtert den Zugriff auf Daten.
SQL ist mit DDS in keiner Weise vergleichbar, zumal der Optimizer (schon mehrfach diskutiert) später sowieso SQL's umbaut um schnellere Ergebnisse liefern zu können.
Daher erlaubt eine View weder einen Index noch einen Order By.
Aus Berechtigungsgründen kann man durchaus eine Where-Klausel einbauen um für bestimmte User/-Gruppen die Sicht der Daten einzuschränken.
Leider wird aber zur Laufzeit zwar die Where-Klausel dann mit in die Ausführung übernommen, aber die Entscheidung über die Verwendung eines Index kann dann wieder eine ganz andere sein.
Beispiel:
Für einen Fall habe ich eine View mit der Selektion auf einen Mandanten (Firma/Werk) erstellt.
Wenn ich nun auf diese View einen "select * from MyView where T1='X'" mache, führt dies zu einem Tablescan, obwohl für den Mandanten und das Feld T1 ein Index (Firma/Werk/T1) vorhanden ist.
Ergänze ich nun den SQL mit "select * from MyView where Firma='A' and Werk = 'B' and T1='X'" verwendet der Optimizer nun den vorhanden Index.
Nun sieht das halt für mich so aus, dass die Ergänzung des umgebauten SQL's mit der Where-Klausel aus der View erst nach der Analyse und der Entscheidung der verfügbaren Zugriffspfade erfolgt.

Fazit:
Auch wenn eine View eine Where-Klausel enthält entbindet mich das u.U. nicht davon, den Where-Ausdruck in meiner Abfrage auf die View zu wiederholen um eine performante Abfrage zu erhalten.

malzusrex
19-10-16, 12:07
Danke für die Antworten,
ich dachte ich kann mir da schnell mal eine logische basteln. Die Datei um die es geht, ist aus Femdsoftware. Sonst konnte ich da mit einem Chain drauf und hatte meinen Satz. Neu ist nun, das für einen Zugriff mehre Sätze da sein können. Wovon aber nur einer gültig ist. Ich dachte, ich könnte mir das einfach machen, indem ich mir meine logische selber bastle, und das Programm nicht großartig ändern muss.
Ich werde aber nun doch das PGM ändern und gleich per SQL zugreifen.

Gruß
Ronald

Fuerchau
19-10-16, 12:41
Auch für die Gültigkeit gibt es doch meist (z.B.Datum) dann die Möglichkeit per SETLL/READE genau den einen Satz zu bekommen.

malzusrex
19-10-16, 12:44
Oder so.
Ich dachte nur ich kann schnell mal mit SQL eine Sicht basteln und im PGM nur die Datei austauschen...

Gruß
Ronald

BenderD
19-10-16, 12:55
... für die Schmuddelkinder geht auch ein Index mit where Klausel, den kann man mit Rekord Löffel Ekzem verarbeiten (würg - wo ist mein Eimer)

D*B

B.Hauser
19-10-16, 14:55
Hier ein Artikel zu dem Thema (selbst auf die Gefahr hin, dass Dieter das Große Kotzen bekommt).

SQL indexes and native I/O – no contradiction (http://www.ibm.com/developerworks/ibmi/library/i-sql-indexs-and-native-io/index.html)

Birgitta

BenderD
19-10-16, 16:48
... da brauchts schon mehr, um mich zu einem SBMLNC (Submit Lunch) zu bewegen

malzusrex
19-10-16, 18:53
Hier ein Artikel zu dem Thema (selbst auf die Gefahr hin, dass Dieter das Große Kotzen bekommt).

SQL indexes and native I/O – no contradiction (http://www.ibm.com/developerworks/ibmi/library/i-sql-indexs-and-native-io/index.html)

Birgitta

Listing 15 war genau das, was ich gesucht habe.
Danke
Gruß Ronald