Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
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. 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); 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).
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
On Mon, 16 Sep 2013 14:01:31 +0200 Jakob Hirsch j...@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
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Hallo Thorben, 2013/9/16 Thorben Thuermer r...@constancy.org On Mon, 16 Sep 2013 14:01:31 +0200 Jakob Hirsch j...@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'));... 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 Das sollte funktionieren da die MW (schon immer?) mittels zweier SQL-Queries den jeweils letzten und nächsten Datenpunkt außer des angefragten Zeitraumes ermitteln und from... to... entsprechend erweitern. Für now() gäbe es also immer den aktuellen und letzten Timestamp und damit die Möglichkeit einen aktuellen Periodenverbrauch zu berechnen. vg Andreas
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Hi, Am 16.09.2013 um 20:45 schrieb Andreas Goetz: Du hast Recht. Was ich geschrieben habe stimmt zwar, allerdings ist der Code noch nicht im Repository angekommen, sondern steht noch in meinem Pull Request: https://github.com/volkszaehler/volkszaehler.org/pull/47 sodele - ist nun drin. Sorry für die Verzögerung - Beta-Tester wären praktisch *hint* Anders formuliert: bitte testen und beschweren, wenn etwas kaputt ist. @Andreas: fettes Merci für's Patchen!!! Gruss, J.
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Servus, Am 16. September 2013 20:53 schrieb Justin Otherguy jus...@justinotherguy.org: sodele - ist nun drin. Sorry für die Verzögerung - Beta-Tester wären praktisch *hint* Anders formuliert: bitte testen und beschweren, wenn etwas kaputt ist. Für das wären Unit-Tests und ein CI-Server gedacht ^^ - travis-ci.org Zumindestens für die großteil einer Applikation. bg