@Smita V, la consulta ineficiente a la que se refiere es solo así porque está aplicando su función de conversión incorrectamente en cada fila de la tabla, donde debe aplicarla a la condición misma. Por lo tanto, en lugar de
select col1,col2,colUnixdatetime from table where From_Unixtime(colUnixdatetime) between wtvdate1 and wtvdate2
, que convierte cada fila de la tabla para compararla con la fecha que tiene. Debe usar
select col1,col2,colUnixdatetime from table where colUnixdatetime between UNIX_TIMESTAMP(wtvdate1) and UNIX_TIMESTAMP(wtvdate2).
Haciéndolo de esta manera, se usarán los índices de tabla apropiados.
@treznik Hace un tiempo pasé de ser un número entero a un tipo de fecha y hora o fecha y hora, por las razones mencionadas anteriormente, en que son mucho más fáciles de leer y manipular (tengo bastante acceso directo a la tabla) Sin embargo últimamente he empezado a volver a pensar en este enfoque por dos razones:
- no existe una ubicación de zona horaria almacenada, por lo que está inferir la zona horaria en función de su ubicación . Esto puede o no ser un problema para usted.
- Ignora el horario de verano. Entonces, cuando los relojes vuelvan a las 2 a. M., Obtendrás 1:30 am dos veces, y decir 2011-10-30 01:30 no te deja saber esto, mientras que 1319938200 lo hace. No creo que haya una forma nativa en mysql para almacenar la fecha, incluida la zona horaria, excepto como una cadena (2011-10-30 01:30 BST).
Todavía estoy intentando descubrir la respuesta a esto, yo mismo.
Me erraron corregido. :) – treznik
No estoy de acuerdo. Verifica mi respuesta. – coderama
El campo DATETIME de MySQL carece de una zona horaria: siempre guarde las fechas en UTC (es decir, evite NOW() - use UTC_TIMESTAMP()); de lo contrario, se meterá en un gran lío al intentar internacionalizar su aplicación y * cambiar la razón * su zona horaria de servidores – jmc