Hallo zusammen,
jetzt muss ich den Thread doch nochmal hervorziehen.... wenn mal so viele Daten in der Datenbank wird's doch etwas komplizierter die Performance zu halten.
Ich habe die letzten Tage einfach ein wenig in PHPMyAdmin rumgespielt und auch die Queries immer wieder mal mit EXPLAIN anzeigen und auch Messen lassen.
Dabei musste ich feststellen, dass sehr viel Zeit für "Creating Sort Index" aufgewendet wird, hier reden wir von ca. 2 Sekunden pro Abfrage (5 Abfragen sind es).
Im Internet bin ich nicht so richtig fündig geworden.
Wie kann ich diesen Wert minimieren???
Bei allen Tabellen liegt ein Index über 'timestamp'. Hab aber festgestellt, das MySQL diesen INDEX nicht nutzt (EXPLAIN SELECT....)
Bei 'possible_keys' steht: timestamp
key => NULL
key_len => NULL
Extras => using Where; using Filesort
Lege ich jedoch eine Mehrspaltigen Index (z.B. idx_twl) über (timestamp, WirkenergieSigmaL_imp, WirkleistungSigmaL)
SELECT CONVERT(DATE_FORMAT(timestamp,'%Y-%m-%d %H:%i:00'), DATETIME) AS timestamp, WirkenergieSigmaL_imp, WirkleistungSigmaL FROM strom_heizungsdaten WHERE timestamp BETWEEN '2018-01-01 00:00:00' AND '2018-12-26 23:59:59' ORDER BY timestamp
wird der Index laut PHPMyAdmin verwendet
key => idx_twl
key_len => 5
Extras => using Where; Using index; Using filesort
Allerdings bleibt es bei den 2 Sekunden für "Creating Sort Index" laut Messung.
Die Tabellen sind mitlerweile doch sehr umfangreich und lass mir bei der Funktion auch mal die Laufzeiten mit ausgeben die ich durch 'microtime()' mit ermittle.
Hier sieht man auch, dass die Laufzeiten der While-Schleifen nach der DB-Abfrage auch einiges an Zeit beanspruchen.
Allerdings werden pro Abfrage ca. 500.000 Datensätze verarbeitet.
Hier mal das Array:
Code:
Abfrage dauerte: 14.422704935074 Sek.
Array
(
[debug] => Array
(
[laufzeiten] => Array
(
[query_webserverdaten] => 0.51565
[query_stromhzg] => 2.64078
[query_stromhaus] => 2.45327
[query_daten_heizung] => 2.04699
[hzgdaten_schleife] => 2.01574
[query_pv_daten] => 4.35963
[pv_schleife] => 1.03131
[array_gesamtdaten] => 0.59378
[array_gruppieren] => 0.4219
[array_pvanteilpur] => 0.09376
[array_berechnungen] => 0
[gesamtzeit] => 14.17269
)
)
[zeitraum] => 2018-01-01|2018-12-26
[datensaetze] => 37875
[gesamtsumme_kwh] => 1886.8117
[pv_pur_kwh] => 762.9697
[pv_anteil_kwh] => 225.193
[gesamt_laufzeit] => 2111820
)
Datensätze in den einzelnen Tabellen:
[webserverdaten] => 354.000
[stromhzg] => 642.000
[stromhaus] => 645.000
[daten_heizung] => 723.000
[pv_daten] => 1.556.000
Vielleicht hat ja jemand noch eine Idee, wie ich das performanter gestalten könnte.