Abfrage dauert über eine Minute

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abfrage dauert über eine Minute

    Hallo allerseits,

    ich versuche aus drei Tabellen Daten per Inner Join und Outer Join zu holen. Es werden zwar die richtigen Daten geholt, aber es dauert über eine Minute.

    Hier meine Abfrag:
    PHP-Code:
    SELECT HSLFNHSTKNHSDATHSVONHSBISHSERRHSFIXFCFILE.FC011TKDMAT.MALFN
                         FROM TKDHST INNER JOIN FCFILE
                             ON TKDHST
    .HSERR FCFILE.FC009
                             LEFT OUTER JOIN TKDMAT ON TKDHST
    .HSLFN TKDMAT.MALFN
                         WHERE  TKDHST
    .HSFNR '$DLRVAR' AND TKDHST.HSVBN '$VBNVAR'
                         
    AND TKDHST.HSGID '$KDGIDVAR'
                         
    AND FCFILE.FC006 'TKD' AND FCFILE.FC007 '$DLRVAR'
                         
    AND FCFILE.FC008 '060'
                         
    ORDER BY HSDAT DESC 
    Die Variablen in der Abfrage werden natürlich vorher als Wert übergeben.
    Zu der Abfrag:
    Hier werden aus folgenden 3 Tabellen Daten zusammengestellt:
    - TKDHST: Daten über technische Einsätze
    - FCFILE: Fehlercode-Tabelle mit Fehlerbeschreibung
    - TKDMAT: Materialverbrauch-Tabelle für jeden Einsatz aus der Tabelle TKDHST
    Ich möchte aus der TKDHST mit der Bediengung TKDHST.HSGID = '$KDGIDVAR' die entsprechenden Felder (s. Abfrage) ausgeben dazu soll außerdem über die Beziehung TKDHST.HSERR = FCFILE.FC009 die Fehlerbeschreibung FCFILE.FC011 aus der Tabelle FCFILE geholt werden. Als letztes Datensatzfeld noch den TKDMAT.MALFN über die Beziehung TKDHST.HSLFN = TKDMAT.MALFN ausgeben.

    Hat jemand vielleicht eine bessere Alternative für meine Abfrage, die nicht allzu lange braucht?

    Als Anlage die 3 Tabellen in Code-Form!

    Vielen Dank vorab

    Gruß

    Otto
    EDIT:
    Hää? Wo bleibt denn mein Datei-Anhang? Naja... wenn jamand möchte, dann schicke ich sie ihm per Mail
    Zuletzt geändert von otto-mueller; 15.03.2004, 22:23.

  • #2
    Hi,

    also ich hätte das wohl so gemacht:
    PHP-Code:
        SELECT 
        TKDHST
    .HSLFNTKDHST.HSTKNTKDHST.HSDATTKDHST.HSVONTKDHST.HSBIS
        
    TKDHST.HSERRTKDHST.HSFIXFCFILE.FC011TKDMAT.MALFN
        FROM TKDHST 
        LEFT JOIN FCFILE ON TKDHST
    .HSERR FCFILE.FC009
        LEFT JOIN TKDMAT ON TKDHST
    .HSLFN TKDMAT.MALFN
        WHERE  TKDHST
    .HSFNR '$DLRVAR' 
        
    AND TKDHST.HSVBN '$VBNVAR'
        
    AND TKDHST.HSGID '$KDGIDVAR'
        
    AND FCFILE.FC006 'TKD' 
        
    AND FCFILE.FC007 '$DLRVAR'
        
    AND FCFILE.FC008 '060'
        
    ORDER BY HSDAT DESC 
    und dann auf jeden Fall den Index auf die Tabellenfelder setzen, nach denen gesucht/sortiert wird:
    TKDHST.HSFNR , TKDHST.HSGID , FCFILE.FC006 , FCFILE.FC007 , FCFILE.FC008 , FCFILE.FC009 , TKDMAT.MALFN
    require_once('gehirn_v_02beta.php');

    Kommentar


    • #3
      geht nicht!

      Hallo,

      danke erstmal für die schnelle Antwort.

      Ich sehe eigentlich keinen großen Unterschied zwischen meiner und deiner Version bis auf den "LEFT JOIN" in deiner Version. Das war aber nicht die Absicht!!! Es muß schon INNER JOIN und nicht OUTER JOIN sein.

      Die Felder sind indiziert.

      Ich habe was anderes probiert und zwar den Teil:
      PHP-Code:
      LEFT OUTER JOIN TKDMAT ON TKDHST.HSLFN TKDMAT.MALFN 
      weggelassen und wurde die Abfrage sogar unter einer Sekunde ausgeführt. - Also die 3. Tabelle macht probleme (TKDMAT.MALFN ist auch indiziert!).

      Hat jemand eine andere Idee?

      Danke vorab

      Gruß
      Otto

      Kommentar


      • #4
        Führ' mal ein DESCRIBE über das Statement aus (DESCRIBE selectstatement) ... um zu prüfen ob die indizes auf verwendet werden ...
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar

        Lädt...
        X