[NEWSboard IBMi Forum]
Seite 1 von 3 1 2 ... Letzte
  1. #1
    Registriert seit
    Nov 2007
    Beiträge
    371

    LF / SQL index

    Hallo,

    ich habe gerade auf der Iseries ein neues LF erstellt .

    Dieses beinhaltet FELD

    A,
    B,
    C.

    Wenn ich jetzt folgenden SQL Befehl absetze .

    Select A,B,C from Datei

    sollte er doch die logische verwenden oder?

    Er verwendet aber eine andere Datei mit einem SELECT/OMIT und sagt dann
    11 - The access path contains static select/omit selection criteria which
    is not compatible with the selection in the query.


    Weiss da jemand Rat??
    Gruss

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    SQL verwendet grundsätzlich nur PF/TABLE's und für den Zugriffsweg vollständige LF's und Indizes.
    Eine eingeschränkte LF, die nur bestimmte Felder beinhaltet dient nur der Vereinfachung eines SQL's (entspricht einer View mit Index).
    Die Abfrage geht aber direkt auf die PF und sucht sich dann einen Index.
    Je nach Version (V5/V6/V7) werden Select/Omit-LF's ignoriert oder wenn die Whereklausel dem Select/Omit entspricht auch verwendet.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Nov 2007
    Beiträge
    371
    Ja aer SQl geht doch auf die physische und der sucht sich dann , sollte sich die beste raussuchen oder ? Der IndexAdvisor hat mir ja die LF vorgeschlagen und jetzt nimmt die Maschine trotzdem die verkehrte. Verstehe ich nicht .
    Meine LF mit Select/Omit wird doch vom SQE sowieso nicht verwendet und wird automatisch an den CQE weitergeleitet . Die Maschine soll einfach nur die neue logische nehmen tut es aber nicht ..... Warum auch immer .

    In meinem Bespiel mach ich ja nur einen Select a,b,c und genauso ist die logische aufgebaut .
    Er nimmt aber die mit Select/omit .. Verstehe ich wirklich nicht .

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Es wird nur die Beste bzgl. Index gewählt!
    Die Felder des Select spielen da keine Rolle.
    Wenn eine PF 5 Felder enthält und eine LF davon dann nur 3, ist diese LF wie eine View zu sehen.
    Wobei eine View keinen Index haben kann.
    Eine View dient ggf. nur der Vereinfachung (select * from MyView) sowie ggf. der Berechtigung, d.h., dass ein User über eine View nicht alle Felder sehen darf.

    Wenn du nun deiner LF einen Index verpasst und deine Where/OrderBy/Groupby-Klausel dazu passt, könnte es sein, dass die LF gewählt wird.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Zitat Zitat von woodstock99 Beitrag anzeigen
    Er verwendet aber eine andere Datei mit einem SELECT/OMIT und sagt dann
    11 - The access path contains static select/omit selection criteria which
    is not compatible with the selection in the query.
    Wie sehen diese Nachricht und die vorhergende genau aus, insbesondere der Teil mit den jeweiligen Zugriffspfaden samt Ursachencodes.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Hier liegt ein Verständnisfehler vor:
    Mit dieser Nachricht werden alle LF's mit Index aufgeführt. Alle Codes ungleich 0 sind ein Grund, warum die LF nicht genommen wurde.
    Ursache 11 bedeutet, dass Select/Omit der Grund für den Ausschluss ist.
    Wie gesagt, ab V6 oder V7 können solche LF's auch gewählt werden, wenn where/order/Group/join passt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Nov 2007
    Beiträge
    371
    The query access plan has been rebuilt.
    All access paths were considered for file XXX
    Additional access path reason codes were used.
    Arrival sequence access was used for file XXX
    Query options used to build the query access plan.

    Message . . . . : All access paths were considered for file xxx.
    Cause . . . . . : The query optimizer considered all access paths built over
    member xx of file xxx in library LIB.
    The list below shows the access paths considered. If file xxx in
    library lib is a logical file then the access paths specified are
    actually built over member xx of physical file xxx in library
    lib. Following each access path name in the list is a reason code
    which explains how the optimizer considered the access path.
    lib/Falsche LF 11
    The reason codes and their meanings follow:
    0 - The access path was used to implement the query.

    @furechau . ich raff es echt nicht . Ich mache doch einen SQL und wähle feld a ,b,c von der physischen. Normal müsste doch der optimizer hergehen und sagen , hey cool ich da eine LF die genauso aufgebaut ist. Der Indexadvisor schlägt mir ja auch diese LF vor ja es gibt ein SQL programm das genau diese felder a,b,c in der Where abfrage hat und trptzdem nimmt er die falsche LF .

    bis jetzt hats ja auch immer funktioniert aber diese LF kann er so wies aussieht nicht leiden ..
    Felder und Reihgenfolge passen mit dem Vorschlag des Advisors überein . Habs nochmal überprüft.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Also noch mal langsam!
    Eine LF besteht aus Feldern und aus Index-Feldern.
    Wenn du nun einen "CREATE INDEX ..." machst, so enthält die LF automatisch alle Felder mit dem gewünschten Index der Felder.
    Willst du das selbe mit einer LF erreichen so musst du alle Felder (oder einfach das selbe Satzformat) sowie die K-Bestimmung für den Index angeben.

    Machst du eine LF mit nur 3 Feldern und dem Index über diese 3 Felder, ist das für SQL eine VIEW (unabhängig vom Index).
    Views finden beim Index suchen aber keine Rolle, da diese (bei SQL) ja auch keinen Index haben.

    Nun können wir aber auch aneinander "vorbeireden" und du erstellst die LF per DDS mit allen Feldern.

    Was nun beim Optimizer passiert und was ich immer wieder erlebe ist, dass der vorgeschlagene Index anschließend nicht genommen wird!
    Da kann man sich dann auf den Kopf stellen wie man will.

    "Felder und Reihgenfolge passen mit dem Vorschlag des Advisors überein" bezieht sich ausschließlich auf die Schlüsselfelder!
    Mach doch einfach folgendes:
    Lösche deine LF und erstelle einen Index per "create index mylib/myindex on mylib/myfile (f1, f2, ...)" und prüfe das Ergebnis per SQL.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Apr 2005
    Beiträge
    104
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Mach doch einfach folgendes:
    Lösche deine LF und erstelle einen Index per "create index mylib/myindex on mylib/myfile (f1, f2, ...)" und prüfe das Ergebnis per SQL.
    Das Dingens wird wohl vewendet werden, also die Lösung sein.

    Unschön ist die Macke beim SQL dennoch, denn früher hat man auf speziell für den Anwendungsfall formulierte logische Dateien gesetzt, die man dann konventionell mit RPG oder COBOL vewendet hat. Da treffen also Weltanschauungen aufeinander, DDS-Welt der AS400 gegen die SQL-Welt, und IBM kann es keinem der beiden wirklich recht machen.

    Obendrein hat die DDS-Ansicht dazu geführt, daß manchmal sehr viele LF's über denselben physischen Dateien erstellt wurden, und der SQL-Optimierer spätestens bei der vierzigsten das Handtuch geworfen und beschlossen hat, lieber den Index selber zu erstellen, als weiter darüber zu brüten, welcher der vielen Zugriffswege denn optimal sein könnte.

    Ich hatte auch mal Ärger mit dynamical select Join auf DDS-Basis, die jedesmal zur Neuindexierung von Millionen Datensätzen führten, obwohl die LF's eigentlich sofort nutzbar gewesen wären. Besser wurde es bei mir durch spezielle Indizes und simpel formulierte SQL-Anfragen, welche die SQL-Engine leichter mappen konnte. Besser als das Neu-Indexieren oder als das sequentuelle Scannen des kartesischen Produktes waren aber auch Selects mit korrelierten Subselects.

    Interessant, daß IBM die Leute immer noch ins Messer rennen läßt, und sogar in Kauf nimmt, System-i Kunden zu vergraulen.

    PS: habt Ihr euch schonmal mit der QAUOOPT beschäftigt ?

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das liegt nicht an IBM sondern am SQL-Standard an den sich die IBM weitestgehend auch hält.
    SQL und DDS ist absolut nicht vergleichbar. man kann zwar Analogien ziehen aber es gibt doch wesentliche Unterschiede.
    Wenn man sich mit SQL-Konzepten nur an Hand von DDS beschäftigt ist man natürlich verraten und verkauft. So funktioniert SQL einfach nicht.
    DYNSLT-Joins, wie der Name schon sagt, muss halt Indizes aufbauen und ist bei DDS eigentlich die schlechteste Lösung, eben mangels Index, performant waren die noch nie.
    Und wenn man nun noch komplexe SQL's erfindet die man so überhaupt nicht programmieren würde, dann kann auch der Optimizer nichts mehr leisten.
    SQL-Zugriffe müssen genauso wohl überlegt sein wie DDS-Zugriffe mit Native-IO und 100en LF's (die auch Maintenance-Zeit kosten).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Zitat Zitat von woodstock99 Beitrag anzeigen
    Ich mache doch einen SQL und wähle feld a ,b,c von der physischen. Normal müsste doch der optimizer hergehen und sagen , hey cool ich da eine LF die genauso aufgebaut ist. ... Felder und Reihgenfolge passen mit dem Vorschlag des Advisors überein . Habs nochmal überprüft.
    Sie mal mit DSPFFD nach, welche Felder die logische Datei tatsächlich besitzt.

    Ergänze mal ein ORDER BY A, B, C in deinem SELECT, wenn du die Daten sortiert benötigst.

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Frage: Die logische Datei mit der SELECT/OMIT-Anweisung, hat diese die gleichen (oder mehr) Schlüsselfelder in der gleichen Reihenfolge wie die neue logische Datei?

    Wenn ja, wird für beide Dateien der gleiche Zugriffsweg verwendet (Access Path Sharing).
    Wenn Du die loglische mit SELECt/OMIT löschst und wieder neu erstellst, sollte zwar auch der gleiche Access Path verwendet werden, aber jetzt zeigt er auf die neue logische und die SELECT/OMIT-Warnung sollte nicht mehr auftauchen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. Glaubensfrage LF / index und performance
    By Robi in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 06-02-15, 15:26
  2. Cobol View und Index (V5R4)
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 29-12-14, 12:01
  3. Artikel: Index aller Artikel 2013/2014 NEWSolutions Print
    By NEWSolutions Redaktion in forum NEWSolutions artikel
    Antworten: 0
    Letzter Beitrag: 15-11-14, 10:09
  4. QDDS: Index absteigend
    By dino in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-09-14, 18:24
  5. Create Index
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 06-11-13, 11:44

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •