Mysql
 sql >> Database >  >> RDS >> Mysql

mysql - cerca timestamp per ora del giorno

Puoi usare HOUR() funzione:

SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9

Purtroppo, le prestazioni di questa query saranno orribili , non appena si superano alcune migliaia di righe, le funzioni non sono indicizzabili, quindi verrà eseguita un'analisi completa della tabella ogni volta che viene eseguita questa query.

Cosa abbiamo fatto in una situazione simile:abbiamo creato un'altra colonna updatetime_hour , l'ha indicizzato e lo ha popolato all'inserimento (e aggiornato all'aggiornamento); quindi la query diventa veloce:

SELECT * FROM 'table' WHERE `updatetime_hour` = 9

Sì, abbiamo denormalizzato i dati ed è un po' più pulito, ma devo ancora vedere una soluzione più veloce. (Abbiamo considerato e misurato i trigger di inserimento e aggiornamento per popolare il updatetime_hour da updatetime , ma ha deciso di non farlo per le prestazioni; vedi se ti possono essere utili.)