Query funktioniert, aber ist sehr unperformant - geht das schneller abzufragen?

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

  • asp2php
    antwortet
    WHERE-Condition filtert das Endergebnis, daher kannst du mal versuchen, möglichst viele die Bedingungen in ON einzubauen, dann wird die Datenmenge nicht mehr so groß und es dürfte auch schneller sein (ich habe nicht genau geschaut, was deine Abfrage macht )

    Einen Kommentar schreiben:


  • HenryH
    antwortet
    schon etwas besser

    Danke für den Tipp. Ist schon etwas performanter.


    So sah die erste Version aus

    PHP-Code:
    SELECT t2.orderidt2.ipaddresst2.customidt2.customnamet2.dateline 
    FROM order 
    AS t1 LEFT JOIN order AS t2 ON t2.ipaddress=t1.ipaddress 
    WHERE t2
    .customid!=t1.customid AND t2.dateline>(t1.dateline-$szeit
    AND 
    t2.dateline<(t1.dateline+$szeit) AND t1.customid=$customid  
    ORDER BY t2
    .customidt2.ipaddresst2.dateline 
    immer noch sehr langsam...

    und so die zweite, die ein winzig bißchen schneller ist

    PHP-Code:
    SELECT t2.orderidt2.ipaddresst2.customidt2.customnamet2.dateline 
    FROM order 
    AS t1 LEFT JOIN order AS t2 ON t1.customid=$customid 
    AND t2.ipaddress=t1.ipaddress 
    WHERE t2
    .customid!=t1.customid AND t2.dateline>(t1.dateline-$szeit
    AND 
    t2.dateline<(t1.dateline+$szeit
    ORDER BY t2.customidt2.ipaddresst2.dateline 
    Die richtigen Ergebnisse liefern beide Versionen

    Beide erzeugen deutlich weniger Last auf dem Server, befriedigend ist das aber aufgrund der langen Scriptlaufzeit immer noch nicht.

    Weitere Indexe in der Tabelle kommen übrigens leider nicht in Frage.

    Gibts an der Abfrage noch etwas zu optimieren?

    Einen Kommentar schreiben:


  • derHund
    antwortet
    hmm,

    ich würde JOIN verwenden und mal per EXPLAIN versuchen herauszufinden, ob man noch irgenwie index setzen kann.

    wenn du kannst, poste doch mal auszugsweise einen dump der tabelle, dann kan man mal schauen ...

    Einen Kommentar schreiben:


  • Query funktioniert, aber ist sehr unperformant - geht das schneller abzufragen?

    Ich hab hier einen MySQL-Query, der auch wunderbar funktioniert, nur leider bei einer Tabelle mit knapp 2 Mio Einträgen ewig lange braucht und die Serverload in unerträgliche Höhen treibt.
    PHP-Code:
    SELECT SQL_BUFFER_RESULT orderidipadresscustomidcustomnamedateline 
    FROM order t1
    ,order t2 
    WHERE t1
    .ipaddress=t2.ipaddress AND t1.customid!=t2.customid 
    AND t2.dateline>(t1.dateline-$szeit) AND t2.dateline<(t1.dateline+$szeit
    AND 
    t1.customid=$customid 
    ORDER BY t1
    .ipaddresst1.dateline 
    Verbal:
    Vorgegeben wird eine Kundennumer [COLOR=darkblue]$customid[/COLOR]. Es soll nun ermittelt und ausgeben werden, ob jemand mit anderer Kundennummer aber identischer IP im Zeitraum +/- [COLOR=darkblue]$szeit[/COLOR] eine Bestellung getätigt hat, d.h. einen Eintrag in der Tabelle 'order' generiert hat.

    Funzt syntaktisch, die Ausgabe ist korrekt, aber es daauuuert ...

    Hab ich da einen Knoten im Hirn gehabt, d.h. lässt sich die Abfrage performanter gestalten?

    Ach ja, läuft auf MySQL 4.1.10a mit PHP 4.3.10
Lädt...
X