2010-06-01 26 views
17

Duplicar posible:
datetime vs timestamp?marca de tiempo Unix VS fecha y hora

que tiene una tabla de MySQL, que tiene una columna add_date. Realiza un seguimiento de la fecha/hora en que se agregó el registro a la base de datos.

consultas basadas en esta tabla:

  1. Mostrar cuando se agregó el registro en el formato: hace 2 horas, hace 4 semanas, 1 año, etc.
  2. Permitir a los usuarios a los registros insertados en cualquier día de búsqueda /mes año. Por lo tanto, el usuario puede elegir ver los registros insertados en 2009 únicamente.

¿Qué sería mejor en este caso: marca de tiempo unix o fecha y hora?

Ahora estoy usando ambos, pero dado que la tabla tendrá millones de registros en el tiempo, tener ambas columnas puede afectar el tamaño de la base de datos.

La marca de tiempo Unix parece ser mejor para la conversión a formato 2 hours en PHP y también es independiente de la zona horaria. Pero datetime tiene una mejor legibilidad y hacer una consulta para una fecha/hora/año en particular parece más fácil.

¿Su sugerencia?

Respuesta

14

Cuando tenga la opción, diría que vaya para mis fechas de SQL.

  • Usted no tiene que cuidar de date range issue s

  • Puede consultar fácilmente intervalos de tiempo utilizando las funciones de MySQL fecha (BETWEEN(), DATE_ADD etc.)

  • consultas relacionadas con la fecha será mucho más rápido , especialmente cuando tiene millones de registros, porque no tendrá que usar FROM_UNIXTIME() que puede ser costoso en grandes consultas

  • Es chi Ld's play para convertir los campos de FECHA en sellos de tiempo UNIX cuando sea necesario.

+2

Esto. Simplemente use UNIX_TIMESTAMP (su_columna) si quiere jugar con la marca de tiempo en el extremo php. Pero en su base de datos, use el tipo de fecha nativo para almacenar las fechas. Además, los datos en su base de datos pueden ser utilizados por otras aplicaciones que pueden preferir el formato de fecha SQL que las marcas de tiempo. – Arkh

+0

¿Habrá algún problema al convertir la fecha a las marcas de tiempo de Unix con respecto a la zona horaria? – Yeti

+1

@Lost_in_code buena pregunta en realidad. Hay una serie de factores involucrados, la configuración de zona horaria del servidor mySQL y la configuración de zona horaria del sistema que PHP usará de forma predeterminada. En general, los campos mySQL DATETIME son insensibles a la zona horaria. Siempre que almacene las fechas UTC allí, debería poder convertirlas en marcas de tiempo fácilmente, pero tenga cuidado si mySQL y/o PHP tienen zonas horarias diferentes de UTC. Relacionado: http://stackoverflow.com/questions/18449/dealing-with-php-server-and-mysql-server-in-different-time-zones –

4

Iré por los formatos de mysql, simplemente porque mysql tiene una gran cantidad de funciones de fecha y hora, para usarlas con timestamp le costará otra conversión.

pero desde la mesa tendrá millones de registros con el tiempo, con las dos columnas pueden afectar el tamaño de la base de datos .

oh my.
¿realmente te preocupan 4 megabytes adicionales de espacio?

+0

Realmente no sé cuánto espacio tomaría (soy nuevo en bases de datos grandes). Si dices que solo va a haber un par de MBs, entonces no veo un problema con ambos. – Yeti

+0

Si no conoce el número, no debe mencionarlo. Ningún programador debería adivinarlo. Es un trabajo de pronosticadores del tiempo. http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html le dirá que datetime toma 8 bytes e int para timestamp - 4. entonces, 4 * 1000000 = menos de 4Mb –

+1

Usted ' Probablemente también quiera usar un índice en ambos campos. Eso no es demasiado costoso en el espacio, pero si usa múltiples índices de campo, esto podría afectar su desempeño. – Kaivosukeltaja

3

, usted puede obtener lo mejor de ambos mundos mediante el uso de una marca de tiempo Unix y la función de MySQL from_unixtime() para convertir el resultado en formato de fecha y hora en que sea necesario.

+1

También puede obtener lo mejor de ambos mundos usando datetime y usando las funciones de fecha para convertir a timestamps de unix cuando sea necesario. Dado que el uso de tipos de datos de fecha y hora facilita muchas consultas, diría que es mejor hacerlo de esa manera. –

+0

Lo que dice El Yobo. La posible pérdida de rendimiento es lo que me haría rehuir de 'from_unixtime()' en tablas grandes (sin embargo, no tengo ninguna referencia). –

+0

Por supuesto, from_unixtime() no se debe usar en consultas que se espera que den como resultado grandes cantidades de datos, solo aquellos que devuelven conjuntos de resultados que se deben mostrar. Además, los tipos de fecha y hora aún se pueden usar para hacer las consultas más legibles con unix_timestamp ('2010-06-01 13:00'). La conversión se realiza solo una vez por consulta, por lo que no hay pérdida de rendimiento. – Kaivosukeltaja

Cuestiones relacionadas