Da die WHERE-Klauses ausschließlich Felder aus Datei C selektiert, würde ich diese als Primary angeben.
Auf die Grouping-Felder sollte ein Index liegen.
Das Problem hierbei ist, dass sowohl aus der 1. als auch der 2. Tabelle Gruppenfelder verwendet werden.
Hierbei hilft eigentlich nur ein WITH-Konstrukt, in dem die einzelnen Select's nur temporäre Zwischen-Ergebnisse liefern und erst zum Schluss das Grouping auf die Ergebnistabelle anwenden.
Beispiel:
Je nach Optimierungsart kann das zu besseren Ergebnissen führen, da ein Index nur auf den Teilergebnissen angelegt wird und wenn diese gering genug sind fällt das kaum noch auf.Code:with xERG1 as (select ... from ... where ... [union select ... from ... where ...] ) ,xERG2 as (select ... from xERG1 inner join ... on ...) ,xERG3 as (select ... from xERG2 inner join ... on ...) select ... from xERG3 group by ... order by ...
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks