FHEM Forum

FHEM => Automatisierung => Thema gestartet von: AndyM am 15 März 2024, 13:27:03

Titel: Indices MariaDB - IDX_HISTORY und DEVICE
Beitrag von: AndyM am 15 März 2024, 13:27:03
Hallo,

meine MariaDB habe ich damals nach folgender Anleitung, mit den Indices IDX_HISTORY und DEVICE, erstellt.
FHEM Tutorial-Reihe - Part 7.3: mySQL-Server (MariaDB) für Logging nutzen (https://haus-automatisierung.com/hardware/fhem/2018/03/12/fhem-tutorial-reihe-part-7-3-mysql-mariadb-server-fuer-logging-nutzen.html)

Später habe ich nach folgender Anleitung ein Sicherungskonzept aufgebaut.
Inhalte einer primären Datenbank in eine andere Standby-Datenbank übertragen (syncStandby) (https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Inhalte_einer_prim%C3%A4ren_Datenbank_in_eine_andere_Standby-Datenbank_%C3%BCbertragen_(syncStandby))
Die Standby-Datenbank habe ich wie die Primär-Datenbank mit den Indices IDX_HISTORY und DEVICE, erstellt.
Den zusätzlich zur normalen Erstellung der history-Tabelle nötigen Primary-Key - PRIMARY KEY(TIMESTAMP, DEVICE, READING) - habe ich mittlerweile auch in meiner Primär-Datenbank. Da sonst die Summe der Events in beiden DBs nicht übereinstimmt.

Bei einem configCheck meiner Primär-Datenbank im DbLog wurde ich darauf hingewiesen den Search_Idx und den Report_Idx anzulegen.

Aktuell habe ich also folgende Indices.

Sind die Indices IDX_HISTORY und DEVICE denn sinnvoll?
Wenn ich den PRIMARY KEY umstelle, würde er den Search_Idx dann Ersätzen?

Ich frage so explizit nach, weil mir bei der Analyse eines Select für einen Plot mit EXPLAIN angezeigt wird, dass der Index IDX_HISTORY verwendet wird, dieser aber nicht von FHEM Vorgeschlagen wird.

EXPLAIN SELECT DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:%s'), DEVICE, READING, VALUE FROM history WHERE 1=1 AND `DEVICE` = 'ESPEasy_Garage_Temp' AND `READING` = 'Pressure' AND `TIMESTAMP` >= STR_TO_DATE('2023-12-09 00:00:00', '%Y-%m-%d %H:%i:%s') AND `TIMESTAMP` <= STR_TO_DATE('2023-12-10 00:00:00', '%Y-%m-%d %H:%i:%s') ORDER BY `TIMESTAMP`
Vielen dank im Voraus
Titel: Aw: Indices MariaDB - IDX_HISTORY und DEVICE
Beitrag von: DS_Starter am 16 März 2024, 00:13:13
Der Index `Search_Idx` ist obsolet wenn der PRIMARY KEY angelegt ist. Darauf wird auch im configCheck hingewiesen. Die Index `IDX_HISTORY` und `DEVICE` würde ich auch als unnötig erachten.
Der Index `IDX_HISTORY`wird wahrscheinlich jede Menge Speicher verbrauchen weil er den VALUE beinhaltet.
Einen Vorteil würde er m.M. nur bringen wenn die SQL auch den VALUE in der where Klausel abfragen würde.