Buongiorno, da anni utilizzo un database con MySql dove inserisco i dati di stazioni meteorologiche.
Sin dall'inizio ho previsto campi tinytint(1) per la conservazione separata delle variabili anno, mese, giorno, ora, minuto, settate tutte come indice.
Dopo anni di studio dei database ho scoperto l'uso della variabile timestamp e sto provando a convertire tutte le query per utilizzare tale variabile al fine di semplificare il codice (soprattutto nelle query di ricerca) e anche di velocizzarlo: ci sono anni in cui il database raggiunge milioni di record e le ricerche sono davvero lente, talvolta davvero estenuanti.
Per tale ragione nella tabella ho aggiunto la variabile timestamp con valore predefinito currdate(). Anch'essa settata come indice.
Ho fatto un primo test:
codice:
SELECT AVG(temp), AVG(ur), AVG(wind), AVG(pressione)
FROM database_stazioni
WHERE temp <> -17.8 AND temp <> -30 AND temp <> 0 AND id_stazione=7
AND Data_anno = 18 AND Data_mese = 1 AND Data_giorno = 3 AND tipo_dato='1'
0.0018 sec
codice:
SELECT AVG(temp), AVG(ur), AVG(wind), AVG(pressione)
FROM database_stazioni
WHERE temp <> -17.8 AND temp <> -30 AND temp <> 0 AND id_stazione=7
AND timestamp >= CURDATE()
0.0122 sec
Le due variabili restituiscono il medesimo risultato, ma come mai la query che usa la ricerca mediante timestamp è 10 volte più lenta?
Dovendo velocizzare le query, timestamp non mi aiuta?
Grazie mille!!