mysql, Query optimieren
bearbeitet von JörgHallo,
ich habe eine kleine Horrorquery, die ziemlich viel leisten muss, es auch tut, aber sich inzwischen auch seine Zeit dafür mimmt.
Und ich bin nicht sicher, wo ich anfangen soll, sie zu optimieren.
Sicher ist nur, dass sie optimiert wreden muss. Sie braucht so um die 7-8 Sekunden, wenn sie ungecached auf die DB trifft.
Wo kann ich ansetzen?
~~~ sql
SELECT SQL_CALC_FOUND_ROWS DISTINCT
r.KundenID,
r....,
...da.ListenID,
ADDDATE(r.Rechnungsdatum,INTERVAL r.Faelligkeit DAY),
m.Mahnstatus,
ADDDATE(m.Mahndatum,INTERVAL m.Faelligkeit DAY),
r.bezahlt,
r.Storno,
UNIX_TIMESTAMP(ADDDATE(r.Rechnungsdatum,INTERVAL r.Faelligkeit DAY)),
UNIX_TIMESTAMP(ADDDATE(m.Mahndatum,INTERVAL m.Faelligkeit DAY)),
k.kdel,
SUM(ze.Bruttozahlung),
rz.GesamtRetoure
FROM _table_rechnungen r
LEFT JOIN _table_rechnungszuordnung rz ON r.RechnungenID = rz.RechnungenID
LEFT JOIN _table_zahlungseingang ze ON r.RechnungenID = ze.RechnungenID
LEFT JOIN _table_da_belege da ON da.BelegID = r.RechnungenID
LEFT JOIN _table_berechnungen b ON r.RechnungenID = b.RechnungenID
LEFT JOIN _table_mahnungen m ON ( r.RechnungenID = m.RechnungenID AND m.aktiv = 1)
AND m.RechnungenID =(SELECT MAX(tmp.RechnungenID) FROM _table_mahnungen tmp
WHERE tmp.RechnungenID = r.RechnungenID AND m.aktiv = 1)
LEFT JOIN _table_kunden k ON r.KundenID = k.KundenID
WHERE r.Belegart = "R"
GROUP BY r.RechnungsNummer
ORDER BY r.RechnungenID DESC LIMIT 450,50
~~~
[Explain](https://www.pic-upload.de/view-36990299/explain.jpg.html) zur Query.
Jörg