Rolf B: MySQL-Performance nach Update mindestens Faktor 10 langsamer

Beitrag lesen

Hallo Klaus1,

je Person und Monat, jeweils für die letzten 12 Monate. D.h. es geht nur um die Anzahl. Also bei 5 Personen, immer 2 Abfragen je Monat, 12 Monate = 120 Abfragen.

Siehste, wusste ich es doch. Das geht in einem Statement. Mit GROUP BY.

SELECT Erfasser, SUBSTR(erstelltAm, 1, 7) as Monat, COUNT(*) as Anzahl
FROM aufgaben
WHERE erstelltAm >= '2020-07-01' erstelltAm < '2021-08-01'
GROUP BY person, monat
ORDER BY person, monat

liefert pro Erfasser und Monat die Anzahl der letzten vollständigen 12 Monate. Ich hab's mit >= und < gemacht statt mit BETWEEN, weil ich so keine Datumsarithmetik für den Monatsletzten brauche (die zwar keine Raketenwissenschaft ist, aber trotzdem Arbeit).

Irgendwas fehlt jetzt noch, du schriebst "2 Abfragen pro Monat", d.h. da fehlt noch irgend ein Merkmal. Aber das kenne ich nicht, davon steht hier nichts. Es ist darum Hausaufgabe für Dich 😉

Wenn erstelltAm ein Datumsfeld wäre, würde ich mit EXTRACT(YEAR_MONTH, erstelltAm) Jahr und Monat rausholen und damit gruppieren (hier stand vorher DATEPART, aber das gibt's bei MySQL und MariaDB nicht).

Alles in ein Array, je Erfasser einen Kuchen draus backen und genießen...

Rolf

--
sumpsi - posui - obstruxi