Query funktioniert, aber ist sehr unperformant - geht das schneller abzufragen?
Einklappen
X
-
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 )
-
schon etwas besser
Danke für den Tipp. Ist schon etwas performanter.
So sah die erste Version aus
PHP-Code:SELECT t2.orderid, t2.ipaddress, t2.customid, t2.customname, t2.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.customid, t2.ipaddress, t2.dateline
und so die zweite, die ein winzig bißchen schneller ist
PHP-Code:SELECT t2.orderid, t2.ipaddress, t2.customid, t2.customname, t2.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.customid, t2.ipaddress, t2.dateline
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:
-
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:
-
HenryH hat ein Thema erstellt Query funktioniert, aber ist sehr unperformant - geht das schneller abzufragen?.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 orderid, ipadress, customid, customname, dateline
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.ipaddress, t1.dateline
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.10Stichworte: -
Einen Kommentar schreiben: