[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    393

    mal wieder sql performance

    Hallo liebe SQL-Gurus

    beide beteiligten Dateien haben rd 8,5 Mio Datensätze
    so war es mal:
    Code:
                                                
    create table temp#b/zuviel as (                                      
    select * from temp#b/meld where trstatus = 'P' and trstat00 <> 'I'   
                                                   and trstat00 <> 'K' 
              and (trrmbele, trbv) not in(select s1bunr, s1bvrg from dtpp  
                      where  s1stat = 0 and s1kzfb = 1)) with data
    das ist die letzte version

    Code:
    select * from temp#b/meld left outer join dtpp on            
    trrmbele = s1bunr and trbv = s1bvrg where                          
             trstatus = 'P' and trstat00 <> 'I' and trstat00 <> 'K'    
                      and  s1stat = 0 and s1kzfb = 1 and s1btyp is null
    Ich brauche aus Datei meld die Sätze, die NICHT in DTPP drin sind.

    Ich habe alle Versionen durch
    With a as ... (einfach, mehrfach)
    not exists statt Join
    alle empfolenen Indices/LF angelegt (mit und ohne select auf die o.a. selektionen)

    Laufzeit immer > 1 Stunde

    Das kann doch nicht wirklich richtig ein oder?
    Beide Dateien haben KEINE gelöschten Sätze

    Hat noch jemand eine Idee die Laufzeit etwas erträglicher zu machen?

    Danke
    Der ILEMax

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.306
    Probier's doch mal in 3 Etappen:

    Jeweils eine Teilmenge der beiden Dateien erstellen und anschließend diese Teilmengen verknüpfen.

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Ein Left join schließt ja nun mal nichts aus sondern ergänzt die Daten nur um Zusatzfelder oder NULL falls nix da ist.
    Also ist die 1. Version eigentlich so korrket:

    select * from temp#b/meld a where trstatus = 'P' and trstat00 <> 'I'
    and trstat00 <> 'K'
    and not exists (select * from dtpp b where ....)

    Für den not exists sind mir die Feldbeziehungen zwischen meld und dtpp nicht klar, also entsprechend anpassen.
    Jetzt musst du natürlich bedenken, dass alle Sätze mit P durchsucht werden müssen, da für <> kein Index genommen werden kann.
    Und je nach Ergebnis sind da eben viele Zugriffe erforderlich.
    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

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    8,5 Mio ist ja nicht gerade viel, die hat man ja in einer Stunde fast mit der Hand durchsucht. Hast Du ma einen exception join probiert? (obwohl ja frei nach Theorie alle Varianten gleich schnell sein sollen.)

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Sep 2005
    Beiträge
    393
    Danke,
    @Baldur
    Die erste Version ist seid ca. 5 Jahren im Einsatz. Aber mit der immer länger werdenden Laufzeit nicht mehr zumutbar

    @pikachu
    Code:
    create table temp#b/zuviel as( 
    with a as (select * from temp#b/meld where trstatus = 'P' and 
               trstat00 <> 'I' and trstat00 <> 'K'), 
    b as (select * from dtpp where s1stat=0 and s1kzfb = 1) 
         select * from a left outer join b on 
             trrmbele = s1bunr and trbv = s1bvrg where s1btyp is NULL) 
    with data
    läuft seid 40 Minuten ...

  6. #6
    Registriert seit
    Sep 2005
    Beiträge
    393
    @DB
    exception join ?
    nö, ich glaube den kenn ich nicht.

    Werde mal googlen und berichten

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... was ich auch schon gehabt habe, war, dass create with no data und insert select eine andere (schnellere) Strategie gewählt hat.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Exception Join entspricht eigentlich dem "not exists", der später implementiert wurde.

    Und ein With-SQL ist nur eine andere Schreibweise. Es wird tatsächlich keine temporäre Tabelle erstellt.
    Ich habe aber aus ähnlichen Gründen auch schon mit temporären Tabellen gearbeitet, also in 2 oder auch mehr Schritten selektiert:

    create table tempA ... as select ....
    create table tempB ... as select * from tempA .....
    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
    Mar 2002
    Beiträge
    5.287
    ... keine CTE! erst Tabelle erstellen und dann in einem weiteren SQL Statement insert into select.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Nov 2003
    Beiträge
    2.306
    Probier's mal mit 3 eigenständigen SELECTs nacheinander...

    SELECT ... FROM Datei 1 WHERE ... >> Arbeitsdatei 1
    SELECT ... FROM Datei 2 WHERE ... >> Arbeitsdatei 2

    SELECT ... FROM Arbeitsdatei 1 WHERE ... NOT IN (
    SELECT ... FROM Arbeitsdatei 2)

  11. #11
    Registriert seit
    Sep 2005
    Beiträge
    393
    @pikachu
    Das ist deutlich schneller!
    < 10 Minuten!
    Seeeeehr seltsam ...
    Danke!

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... das kommt auf die selektivität an, die temp table variante zieht die selektivität vor alles andere (und hält die Query engine zuweilen von überraffinierten Versuchen ab).
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Und wieder mal SQL-Optimizer
    By Fuerchau in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 23-06-17, 10:04
  2. Mal wieder SQL
    By mk in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 09-07-15, 11:31
  3. Alle Jahre wieder .....
    By DKSPROFI in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 24-12-14, 19:03
  4. System Performance Analyse und Performance Tuning
    By Bernstein in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 05-08-14, 17:34
  5. Spools vom PC wieder auf AS
    By Pia in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 06-11-02, 09:03

Berechtigungen

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