Hallo Rolf,
ich muss gerade mal eine Zwischenantwort schreiben. Eigentlich viel zu früh, weil ich Deine Antwort für mein Dafürhalten noch nicht intensiv genug durchgearbeitet habe. Es kommt also noch eine weitere Antwort.
Aber ich bin grad so überwältigt vom Ergebnis, das muss jetzt einfach sofort raus. 😅
Du weißt ja, dass das Weglassen des JOINS (berechnungen) bereits die Query auf irgendwas zwischen 25 und 40% der Ursprungsquery reduziert hatte. Fand ich schon wirklich klasse.
Aber jetzt kommts und das dürfte auch für dich interessant sein.
Wenn Du eine
LIMIT
Verarbeitung machst, weil Du das Ergebnis durchblättern willst, könnte es auch helfen (weiß ich aber nicht - MYSQL optimiert LIMIT Angaben ziemlich gut), wenn Du in einer ersten Query die zu zeigenden RechnungsIDs bestimmst. Da es zu einer Rechnungsnummer immer nur einen Satz gibt, sollte sich das allein mit der Rechnungen-Tabelle ausführen lassen. Für die Monsterquery fügst Du in der WHERE-Klausel noch ein "AND RechnungenID IN ($idlist)" hinzu. $idlist ist eine kommaseparierte Implosion der IDs aus der ersten Query. Du solltest aber im PHPMYADMIN erstmal manuell versuchen, ob das überhaupt merklich was bringt. Versuche unterschiedliche ID-Bereiche einmal mittels LIMIT und einmal mittels IN Auflistung zu selektieren und vergleiche die Laufzeit.
Das ist der absolute Hammer. 👍😍
Selbst wenn ich den unnötigen berechnungen-JOIN drin lasse, reduziert dieser Tip die Urspungsquery auf einen fast nicht messbaren (weil so kurz) Bruchteil der Usprungsquery und ich rede jetzt tatsächlich von "anstatt 8 Sekunden nun 0,0Irgendwas Sekunden Sekunden"
Habe jetzt so 4-5 Messungen gemacht und das ist so wirklich reproduzierbar.
Ich werde später den Rest Deines Posts auch noch durcharbeiten, aber ich glaube, neben dem Entfernen des unnötigen JOINS wird dann meine Hauptaufgabe sein, eine schlanke Query zu finden, die mir pro anzuzeigende Seite die entsprechende $idlist
vorab selektiert. Oder wie siehst Du das?
Trotzdem interessiert mich, ob der GROUP BY nötig ist oder nicht. Das aber vorrangig, um es zu verstehen. Denn so etwas kommt ja "alle Nase lang" vor.
Wirklich mega, Deine Tips! 👍
Jörg