Hallo allerseits,

ich hänge grade an der korrekten Syntax einer Abfrage fest, und bin mir nicht mal mehr sicher, ob es mit einer einzelnen Abfrage überhaupt geht.

Eine Beschreibung der Datenbank:

Die Daten sind etwa 780.000 Datensätze, die relevanten Keys sind:
id : Primary Key mit AUTOINC
timest : Unixsystemzeit (s) von Script das die Daten eingesammelt hat
maschi : Kürzel einer Maschine, von der die Daten stammen

Es sind derzeit Daten von 26 Maschinen in der DB und ich brauche ab und zu die jeweils letzten Datensätze jeder Maschine mit den höchsten Timestamps.
Die habe ich bisher so abgefragt:
Code:
SELECT *, MAX(timest) AS timest FROM daten GROUP BY maschi
Die Abfrage dauert fast 15 Sekunden und ist damit unerträglich langsam, trotzdem liefert sie schonmal das richtige Ergebnis.

Nun habe ich noch einige andere Kombinationen ausprobiert, halbwegs erfolgreich war:
Code:
SELECT * FROM daten GROUP BY maschi ORDER BY `timest` DESC LIMIT 1
(Liefert den Treffer für eine Maschine, dauert nur 2.9 sec)

Wenn ich nur für die Abfrage mit einem WHERE auf eine Maschine reduziere, muss ich trotzdem 26 Abfragen abschicken, was im Ergebnis noch langsamer wäre.

Irgendwie muss es doch auch anders gehen.

Kann ich meine erste Abfrage irgendwie optimieren oder umformulieren, sodass ich eine Abfrage in weniger als 5 sec hinbekomme?

Code:
SELECT * FROM daten GROUP BY maschi ORDER BY `timest` DESC LIMIT 26
(Liefert zwar für jede Maschine einen Datensatz, aber nur noch einer davon stimmt auch. Die Zeit für die Abfrage bleibt allerdings bei etwa 2.9 sec stabil)

Gruß,
Molaf