Hi *all

ich habe hier eine View die 3 Dateien miteinander verknüpft und mit Union noch 'Reste' hinten anklebt.
Wenn ich diese View im SQL anzeigen lasse, mit oder ohne Selektion ist das 'erträglich'
(1-2 Sekunden).
Mit einem SQLRPGLE Pgm mache ich mehrere Count(*) auf die View mit verschiedenen selects. Teilweise mit einer weiteren Verknüpfung.

Das Pgm zeigt 24 Zeilen, je Zeile werden 4 Sql ausgeführt.
Die Summe aller gezählten Sätze (über alle 24 Zeilen) ist < 1 Mio.

Auf das Bild warte ich ca. 4 Minuten !!
Und das seltsame ist. das ich das Gefühl habe, das es durch die vielen LF die ich anlegen sollte (lt. STRDBG) eher langsamer geworden ist.
Bei den LF ist m.E. einiges blödsinniges dabei, ich habe sie aber trotzdem angelegt.
Bsp.:
LF1 Feld5, Feld3, Feld7, Feld1
LF2 Feld1, Feld3, Feld5, Feld7
...
Im Prinzip immer diese 4 Felder in allen möglichen Kombinationen.
Seltsamerweise auch mit nur 3 Feldern trotzdem es ein lf mit 4 Feldern in gleicher Folge gibt
.
Egal, ich habe alles angelegt was empfohlen wurde.
Aber gefühlt ist das Pgm nun deutlich langsamer.

Es wird nun kein LF mehr empfohlen, auch nicht via Navigator

Hat noch jemand einen Tipp Wo ich drehen kann?

Code:
create view hissc#v01 as(                                                       
-- wieviele Monate? 
-- alle Felder des unique keys in dem select                                                            
with xx as (select dec(substr(inhacd, 1, 2), 2, 0) as mon from cbuchp01         
            where finrcd = 0 and sprccd = 'D' and sakzcd = '6' and              
                  sartcd = 'FORM' and rkeycd = 'CNT'),                     

-- aktuellste Satz je Teilnehmer?                                                              
    yy  as (                                                                    
-- aktuelle Daten, deren 'normaler' Wert nicht älter als 24Monate ist    
-- wobei die 24 aus dem codebuch kommt                                          
   select max(hcdejj*10000+hcdemm*100+hcdett) as dd, hcsunr, hcsun2, hcsu22     
                                                                    from hisscp 
   where  hcklas = 'K10'                                                        
   group  by hcsunr, hcsun2, hcsu22                                             
   having max(hcdejj*10000+hcdemm*100+hcdett) >=                                
            dec(replace(char(current_date- 
                   (select mon from xx) Months, iso), '-', ''), 8, 0)),             

-- hisscp satz da ich ja den Wert brauche                                      
     a as (                                                                     
   select dd as d, a.hcsunr, a.hcsu22, a.hcsun2,                                
                                            hckate as maxwert
    from   hisscp a inner join yy on 
             yy.hcsunr=a.hcsunr and yy.hcsun2=a.hcsun2 and 
             yy.hcsu22=a.hcsu22 and 
             yy.dd = a.hcdejj*10000+a.hcdemm*100+a.hcdett                 
    where a.hcklas = 'K10'                                                      
           )                                                                     
 -- hisscp verknüpft mit aktenp und mandap                                       
 select azkey1, azkey2, azkey3, d, maxwert, dec(case when azsun2 = 3 then 2     
                                                       else 1 end, 1, 0) as cnt, 
        azmk, azmst, makzfo, azdwit, azdwim, azdwij,  azfonr                     
 from   aktenp, a, mandap    
 where a.hcsu22=azsun2 and a.hcsunr=azsunr and 
          azmaan = maaunr and  azmanr = mamdnr    
 -- und nun noch die, die keinen gültigen Wert haben    
union all  
select azkey1, azkey2, azkey3, dec(20491231, 8, 0) as d,          
                                          '00000' as maxwert, azsun2 as cnt,
        azmk, azmst, makzfo, azdwit, azdwim, azdwij, azfonr                   
from   aktenp left outer join a on 
         azsunr=a.hcsunr and azsun2=a.hcsun2  
                   inner join mandap on                                              
                                azmanr = mamdnr and 
                                azmaan=maaunr 
where a.hcsunr is null                
          )
und

Code:
* je Zeile diese beiden sql, 2 mal, 2. mal als makzfo = 1 
C/EXEC SQL                                                                
C+ SET :AMSFO_F =(SELECT COUNT(*) FROM HISSC#V01 WHERE AZFONR = :MASN     
C+      AND AZDWIJ*10000+AZDWIM*100+AZDWIT <= :DTV  AND MAKZFO = 0 AND    
C+      MAXSCORE <> '00000')                                              
C/END-EXEC                                                                
 * ANZAHL MIT Wert GEMÄß MK/MST FREMD                                    
C/EXEC SQL                                                                
C+ SET :AMSMS_F =(SELECT COUNT(*) FROM HISSC#V01 WHERE AZMK*1000+AZMST    
C+ IN(SELECT DISTINCT MKKETT*1000+MKSTUF FROM MAKESP WHERE MKFORM = :MASN)
C+      AND AZDWIJ*10000+AZDWIM*100+AZDWIT <= :DTV  AND MAKZFO = 0 AND    
C+      MAXSCORE <> '00000')                                              
C/END-EXEC
Danke
Robi