Domanda

Ho una tabella che memorizza i dati del sensore (attualmente 100 m righe) da stazioni di siti diversi. Nel mio caso, i siti possono avere molte stazioni. Crea l'istruzione tabella è la seguente:

CREATE TABLE sensor_data (
site INT NOT NULL,
station INT NOT NULL,
time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
reading1 FLOAT DEFAULT NULL,
reading2 FLOAT DEFAULT NULL,
reading3 FLOAT DEFAULT NULL,
reading4 FLOAT DEFAULT NULL,
reading5 FLOAT DEFAULT NULL,
reading6 FLOAT DEFAULT NULL,
reading7 FLOAT DEFAULT NULL,
reading8 FLOAT DEFAULT NULL,
reading9 FLOAT DEFAULT NULL,
reading10 FLOAT DEFAULT NULL,
reading11 FLOAT DEFAULT NULL,
reading12 FLOAT DEFAULT NULL,
reading13 FLOAT DEFAULT NULL,
reading14 FLOAT DEFAULT NULL,
reading15 FLOAT DEFAULT NULL,
reading16 FLOAT DEFAULT NULL,
reading17 FLOAT DEFAULT NULL,
reading18 FLOAT DEFAULT NULL,
reading19 FLOAT DEFAULT NULL,
reading20 FLOAT DEFAULT NULL,
KEY Index_sst (site, station, time)
) ENGINE=InnoDB;

Devo interrogare le letture di una stazione specifica aggregata per intervallo definito da giorno o giorno per un utente. Le domande sono le seguenti:

Domanda 1

SELECT AVG(reading1), DATE_FORMAT(time, '%Y-%m-%d 00:00:00') AS daily 
FROM sensor_data
WHERE site=1 AND station=1 AND time>='2010-00-00 00:00:00' 
GROUP BY daily 
ORDER BY daily;

Domanda 2

SELECT AVG(reading1), DATE_FORMAT(time, '%Y-%m-%d %H:00:00') AS hourly
FROM sensor_data
WHERE site=1 AND station=1 AND time>='2010-00-00 00:00:00' 
GROUP BY hourly
ORDER BY hourly;

Queste query non utilizzano l'indice, ma utilizzano la tabella e il filesort temporanei.

Come dovrei sbarazzarmi del lungo tempo di esecuzione di queste domande? L'aggiunta di una colonna di data separata e una data di stazione di indicizzazione sembra migliorare Domanda 1, ma non ho idea di Domanda 2. Mi chiedo come potrebbe essere il modo ottimale in questo caso.

Violino SQL

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top