mexxwell33: Probleme mit SQL Abfrage - bestimmte Anzahl an Messungen/pro Ort

Beitrag lesen

Sorry hier nochmal das Statement mit C&P:

SELECT l_t.id, l_t.time, l_t.messpunkt, l_t.data FROM messungen as l_t
       INNER JOIN (select SUBDATE(max(time), INTERVAL 15 MINUTE) as c_time,
                           messpunkt FROM messungen
                   group by messpunkt ) as r_t
     ON l_t.messpunkt = r_t.messpunkt
 WHERE  l_t.time > r_t.c_time
ORDER BY time DESC

Benötigt ewig lange, daher habe ich die Abfrage abgebrochen.

Mit zusätzlicher Einschränkung des Zeitraum z.B. nur Datensätze ab xxx durchsuchen dauert die Abfrage nur einige Sekunden.

SELECT l_t.id, l_t.time, l_t.messpunkt, l_t.data FROM messungen as l_t
       INNER JOIN (select SUBDATE(max(time), INTERVAL 15 MINUTE) as c_time,
                           messpunkt FROM messungen
                   where time > '2008-08-13'
                   group by messpunkt ) as r_t
     ON l_t.messpunkt = r_t.messpunkt
 WHERE  time > '2008-08-13' AND
        l_t.time > r_t.c_time
ORDER BY time DESC

Wäre im Prinzip OK, dennoch bin ich damit nicht ganz happy, denn ich hätte gerne eine Abfrage, die mir die letzten x Messungen aller Messpunkte ermittelt.
Mit meiner Abfrage bekomme ich zwar brauchbare Ergebnisse, jedoch kann es sein das einige Messpunkte seit längerer Zeit daher < als r_t.c_time keine Messungen mehr geliefert haben und daher nicht im Ergebnis erhalten sind.

Diese müsste ich dann einzeln mit beispielsweise folgendem Query ermitteln.

SELECT id, time, messpunkt, data FROM messungen
 WHERE messpunkt = 'AS71_lmz_093'
 ORDER BY time DESC
 Limit 10

Nun habe ich es auf einen anderen Weg probiert und zwar, bastle ich über die Applikation ein Abfrage mit einer Menge an UNIONs (700 ;-)). Wie nachfolgend gezeigt. Dies bringt zwar das gewünschte Ergebnis, dauert aber noch immer ziemlich lange ca. 3 Minuten :-( . Mit Zeiteinschränkung im WHERE z.B auf nur DS der letzten paar Tage zu durchsuchen, bringe ich die Abfrage auf ~10s. Nur müsste ich dann wieder fehlende Messungen einzeln abfragen.

(SELECT id, time, messpunkt, data FROM messungen
 WHERE messpunkt = 'AS71_lmz_091'
ORDER BY time DESC Limit 10)
UNION
(SELECT id, time, messpunkt, data FROM messungen
 WHERE messpunkt = 'AS71_lmz_092'
ORDER BY time DESC Limit 10)
UNION
...

Gibt es nicht eine elegantere Lösung?

Hier noch die Infos zur DB:
 Wie gesagt mysql 4.1
 Datensätze in der Tabelle: momentan 3661100
 Engine ist InnoDB
 Indiziert ? (Index ist drauf, kenne mich damit aber leider (noch) nicht aus)
 Data ist lediglich vom Typ int

Möchte mich schon mal im vorhinein für deine / eure Hilfe bedanken!

lg mexxwell33