Permítanme empezar diciendo que he mirado muchas preguntas, pero todas ellas se refieren a Timestamp y DateTime tipo de campo sin indexación. Al menos esa es mi entendimiento.

Como todos sabemos, hay ciertas ventajas cuando se trata de DateTime. Poniendo a un lado por un minuto, y suponiendo que la tabla del motor es InnoDB con 10+ million records, que la consulta iba a realizar más rápido cuando los criterios se basan en:

  1. DateTime con índice de
  2. int con el índice de

En otras palabras, es mejor almacenar la fecha y la hora como DateTime o timestamp de UNIX en int? Tenga en mente que no hay ninguna necesidad de cualquier elemento incorporado en funciones de MySQL para ser utilizado.

Actualización

Probado con MySQL 5.1.41 (64bit) y 10 millones de registros, pruebas iniciales mostraron mejoras significativas en la velocidad de diferencia en favor de int. Dos tablas se utilizaron, tbl_dt con DateTime y tbl_int con int columna. Algunos de los resultados:

SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt`;
+----------+
| COUNT(*) |
+----------+
| 10000000 |
+----------+
1 row in set (2 min 10.27 sec)

SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int`;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (25.02 sec)

SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt` WHERE `created` BETWEEN '2009-01-30' AND '2009-12-30';
+----------+
| COUNT(*) |
+----------+
|   835663 |
+----------+
1 row in set (8.41 sec)

SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int` WHERE `created` BETWEEN 1233270000 AND 1262127600;
+----------+
| COUNT(*) |
+----------+
|   835663 |
+----------+
1 row in set (1.56 sec)

Voy a publicar otra actualización con ambos campos en una tabla como la sugerida por shantanuo.

Actualización #2

Resultados finales después de numerosos bloqueos en el servidor 🙂 tipo Int es significativamente más rápido, no importa lo que la consulta se ejecute, la diferencia de velocidad era más o menos los mismos resultados anteriores.

«Extraño» de la cosa observada de tiempo de ejecución fue más o menos el mismo que cuando dos tipos de campo se almacenan en la misma tabla. Parece MySQL es lo suficientemente inteligente como para averiguar cuando los valores son los mismos cuando se almacena en tanto DateTime y int. No hemos encontrado ninguna documentación sobre el tema, por lo tanto, es sólo una observación.

  • No lo has probado? ¿Por qué no la instalación de una rápida referencia y averiguar?
  • Trabajar en ella como se habla, se necesita algo de tiempo para llenar de 10 millones de registros con el hardware de mi 🙂
  • Asegúrese de SELECCIONAR SQL_NO_CACHE en su prueba
  • Usted puede almacenar los valores en 2 columnas, int tienen índices y datetime será utilizada para la visualización propósito. Si eso no es una opción, a continuación, guardar la fecha de tipo datetime.
  • Ver respuesta actualizada.
  • el performace es porque io obligado y no la cpu. Por lo tanto, si utiliza dos tipos de campos que almacena más datos, este es el motivo de la misma el tiempo de ejecución.

3 Comentarios

  1. 6

    Mi instinto sería decir que los enteros son siempre más rápido. Sin embargo, esto no parece ser el caso

    http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/

    Editado para añadir: me doy cuenta de que usted está usando InnoDB, en lugar de MyISAM, pero no he encontrado nada para contradecir esta en la InnoDB caso. También, el mismo autor hizo un InnoDB prueba

    http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-innodb/

    • Simplemente porque el uso de ` DONDE datetime > UNIX_TIMESTAMP(‘1970-01-01 01:30:00’) Y datetime < UNIX_TIMESTAMP(‘1970-01-01 01:35:00’)` en sus consultas para las pruebas INT – es muy divertido.

Dejar respuesta

Please enter your comment!
Please enter your name here