Hallo Andreas,
vielen Dank für deine ausführliche Antwort.
Am 20.02.22 um 14:13 schrieb Andreas Kretschmer:
Wenn Du alle Werte eines Tages holen willst, hilft ein Index schon mal ganz gewaltig. Ich hab das mal nachgestellt. PostgreSQL 14.1 in einer lokalen Minikube-Kubernetes-Instanz, daher nicht unbedingt schnell.
Angelegt wurde die Tabelle mit dem Kommando:
CREATE TABLE IF NOT EXISTS $tabelle ( created timestamp NOT NULL default CURRENT_TIMESTAMP, c180 int(12) unsigned default NULL, c280 int(12) unsigned default NULL, PRIMARY KEY (created) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Die Spalte "created" ist bei der Tabelle schon als "primary key" eingestellt. Lt. Wikipedia wird da automatisch ein Index angelegt. Hilft da zusätzlich noch einer?
Du siehst, ohne Index ist die Abfrage Faktor 10 langsamer. Was hast Du an Mengen von Datensätzen, daß das bei Dir so lange dauert? (PostgreSQL führt die Abfrage auf 3 Cores aus, der Hauptprozess startet 2 Worker-Prozesse)
2-minütliche Datensätze 11 Jahre lang. Der Logger ist ein Intel Atom Z520 (1 Core, 2 Threads, 1,33MHz) und über nimmt auch die Verarbeitung und Darstellung auf einer Webseite. Da braucht man Geduld. :-)
Btw: was mir grad auffällt, bei den gezeigten Lösungen bisher wird die Differenz der Zeitspalte berechnet, die aber eigentlich immer 2 Minuten sein sollte, nach Deinen Ausführungen. Ich habe die Differenz der Meßwerte zur vorherigen Messung berechnet, was ist richtig?
Ich brauche die Zeitdifferenz der letzten zur vorletzten Zeile in der Tabelle. Es sind nicht immer genau 2 min. Ich habe die Zeitdifferenzberechnung jetzt in PHP gelöst. Ich dachte, es gibt da einfache Time-Funktionen in (MY)SQL, weil der Timestamp ja von der Datenbank geschrieben wird.
So langsam wird mir wieder klar, warum ich seit dem Studium immer einen großen Bogen um Datenbanken gemacht habe. Sie helfen Probleme zu lösen, die wir ohne sie nicht hätten. ;-)
VG,
Erik