Ich brauche mal einen SQL Optimierer
Ich habe da eine Query um Kundendaten und diverses anderes zeug auszulesen. Der Anwender kann einige Parameter selbst einstellen. Unter anderem auch das Sortieren. Und genau das macht mit Sorgen. Es befinden sich ca. 1500 Datensätze in der ersten Tabelle.
Läuft: 0.02 Sek.
Mit Sortierung wird´s dann richtig schön langsam.
Läuft 0.26 sek.
Explain() sagt mir beim ORDER BY, dass eine TEMP DB verwendet wird. Und die wird wohl auch die Performance fressen ... Hat jemand eine Idee, wie man das ganze beschleunigen kann?
Order by über ein INT Feld ist ebenso langsam. Das Setzen von weiteren Indizies auf die zu sortierenden Felder bringt 0,gar nichts
An den anderen Indizies habe ich schon ewig und drei tage gebastelt. Die scheinen so richtig zu sitzen.
Danke im voraus!
Ich habe da eine Query um Kundendaten und diverses anderes zeug auszulesen. Der Anwender kann einige Parameter selbst einstellen. Unter anderem auch das Sortieren. Und genau das macht mit Sorgen. Es befinden sich ca. 1500 Datensätze in der ersten Tabelle.
Code:
SELECT * , o.FK_USER AS byuser FROM tr_kunde k LEFT JOIN tr_EGAL g ON k.FK_GROUP = g.ID_GROUP LEFT JOIN tr_auchegal s ON k.ID_KUNDE = s.FK_KUNDE LEFT JOIN tr_ganzegal o ON o.FK = k.ID_KUNDE AND o.FK_TYP = 'KUNDE' LEFT JOIN tr_wasanderes ac ON k.ID_KUNDE = ac.FK AND ac.FK_TYP = 'kunde' LEFT JOIN tr_auchschoen u ON k.FK_USER_M = u.ID_USER LEFT JOIN tr_einetabelle r ON u.FK_ROOT = r.ID_ROOT WHERE ( g.GROUP_LFT >=9 AND g.GROUP_RGT <=16 ) AND ( r.ROOT_LFT >=1 AND r.ROOT_RGT <=22 )LIMIT 0 , 10
Mit Sortierung wird´s dann richtig schön langsam.
Code:
SELECT *, o.FK_USER AS byuser FROM tr_kunde k LEFT JOIN tr_EGAL g ON k.FK_GROUP = g.ID_GROUP LEFT JOIN tr_auchegal s ON k.ID_KUNDE = s.FK_KUNDE LEFT JOIN tr_ganzegal o ON o.FK = k.ID_KUNDE AND o.FK_TYP = 'KUNDE' LEFT JOIN tr_wasanderes ac ON k.ID_KUNDE = ac.FK AND ac.FK_TYP = 'kunde' LEFT JOIN tr_auchschoen u ON k.FK_USER_M = u.ID_USER LEFT JOIN tr_einetabelle r ON u.FK_ROOT = r.ID_ROOT WHERE ( g.GROUP_LFT >=9 AND g.GROUP_RGT <=16 ) AND ( r.ROOT_LFT >=1 AND r.ROOT_RGT <=22 )LIMIT 0 , 10 ORDER BY NACHNAME ASC , VORNAME ASC
Explain() sagt mir beim ORDER BY, dass eine TEMP DB verwendet wird. Und die wird wohl auch die Performance fressen ... Hat jemand eine Idee, wie man das ganze beschleunigen kann?
Order by über ein INT Feld ist ebenso langsam. Das Setzen von weiteren Indizies auf die zu sortierenden Felder bringt 0,gar nichts
An den anderen Indizies habe ich schon ewig und drei tage gebastelt. Die scheinen so richtig zu sitzen.
Danke im voraus!
EDIT:
alle ID_ und FK_ Felder sind BIGINT UNSIGNED NOT NULL
Kommentar