sql >> Base de Datos >  >> RDS >> Mysql

mysql:busque la marca de tiempo por hora del día

Puede usar HOUR() función:

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

Por desgracia, el rendimiento de esta consulta será horrible , tan pronto como supere unas pocas miles de filas, las funciones no son indexables, por lo que se realizará un análisis completo de la tabla cada vez que se ejecute esta consulta.

Lo que hicimos en una situación similar:creamos otra columna updatetime_hour , lo indexó y lo completó al insertar (y actualizó al actualizar); entonces la consulta se vuelve rápida:

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

Sí, hemos desnormalizado los datos y es un poco más sencillo, pero todavía tengo que ver una solución más rápida. (Consideramos y medimos los activadores de inserción y actualización para completar el updatetime_hour de updatetime , pero decidió en contra por desempeño; vea si le serían útiles).