[vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam

Thorben Thuermer r00t at constancy.org
Mon Sep 16 16:19:58 CEST 2013


On Mon, 16 Sep 2013 14:01:31 +0200
Jakob Hirsch <jh at plonk.de> wrote:
> Sven peitz, 2013-09-14 11:07:
> > $result1=mysql_query("SELECT value FROM data WHERE id = (select max(id)
> > FROM data WHERE channel_id LIKE  '14')");
> ...
> > Diese Anfrage dauert ca. 6-7 Sekunden. Hat jemand eine Idee wie man
> > dieses beschleunigen kann?
> 
> Der subquery macht einen table-scan über die komplette data-Tabelle, was
> dauert natürlich entsprechend lange.

achso, es gibt keinen index auf `id`...
den scan macht dann aber die haupt-query, nich die subquery.

> So ist es kein Problem (wenn auch nicht schön):
> SELECT value FROM data WHERE channel_id=14 AND timestamp=(select
> max(timestamp) FROM data WHERE channel_id=14);

wie schon gesagt, man wuerde doch eleganter schreiben:
select value from data where channel_id=14 order by timestamp desc limit 1;

> Allerdings sollte man nicht ohne Grund direkt auf der DB arbeiten. Das
> Vorgehen wie von Andreas Götz ist auch deutlich einfacher (Abfrage mit
> from=now).

from=now...
funktioniert doch aber wie gehabt nur bei erfassung absoluter staende.
ansonsten war die methode doch "from=<x> seconds ago"...?
also so, dass im im angegebenen zeitraum (mit now = nur aktuelle sekunde)
genug werte erfasst sind, damit der interpreter in der middleware
daraus etwas berechnen kann.
also bei s0-zaehlern mindestens zwei impulse, etc...
oder wurde da middleware-seitig was geandert?

- Thorben


More information about the volkszaehler-dev mailing list