Ich habe Daten aus 3 verschiedenen Tabellen und ich muss einige bedingte Auswahl zwischen ihnen. DB Abfrage ist wie folgt:MySQL multi Tabelle beitreten
SELECT proddb.onrrnr,
proddb.onr AS tellimus,
proddb.idnr AS ID,
proddb.prod AS toode,
proddb.proddate,
CASE
WHEN pf_prodQtySeq.glLiteNr = 1 THEN pf_ordRowSeq.gl1
WHEN pf_prodQtySeq.glLiteNr = 2 THEN pf_ordRowSeq.gl2
WHEN pf_prodQtySeq.glLiteNr = 3 THEN pf_ordRowSeq.gl3
WHEN pf_prodQtySeq.glLiteNr = 4 THEN pf_ordRowSeq.gl4
END AS klaas,
Sum(pf_prodQtySeq.planQty) AS kogus
FROM proddb
JOIN pf_prodQtySeq
ON proddb.onrrnr = pf_prodQtySeq.onrrnr
JOIN pf_ordRowSeq
ON proddb.onrrnr = pf_ordRowSeq.onrrnr
WHERE pf_prodQtySeq.prLineSh = 'HEG'
AND pf_prodQtySeq.planQty > 0
GROUP BY proddb.idnr
ORDER BY klaas DESC LIMIT 1000,25;
EDIT: dort in Code, wo auch ORDER und LIMIT-Klauseln, LIMIT ist dies die bis zu 10 Sekunden nach unten Abfrageausführungsgeschwindigkeit dreht, ohne LIMIT Abfrage über weniger als 1 sec dauert. Wie optimiert man LIMIT?
Diese Abfrage funktioniert OK, aber es dauert zu viel Zeit, um auszuführen. Diese Abfrage dauert ungefähr 5 Sekunden, obwohl jede Tabelle nur aus weniger als 50 000 Zeilen besteht. Versucht auch zweimal schneller und mit mehr RAM-Server; auch gleich mal. Tabellen sind indiziert. Gibt es etwas mit Abfrage zu tun, um es zu beschleunigen, oder ich muss Tabellen konsolidieren. Dies bedeutet, dass alle Daten in einer Tabelle liegen.
'Diese Abfrage funktioniert OK' ... nicht wirklich, weil Sie nicht aggregierte Spalten auswählen, während Sie' GROUP BY' verwenden. Vielleicht fügen Sie eine Beschreibung hinzu, was die Abfrage machen soll. –
Statt 'Join' können Sie' Inner Join' versuchen. –
Verwenden Sie 'EXPLAIN', um die Möglichkeiten zur Verbesserung der Abfrageleistung zu ermitteln. Sie können auch 'EXPLAIN' Ergebnis in Ihrer Frage zeigen. – Alexander