53 votes

Index MySQL Integer vs DateTime

Permettez-moi de commencer par dire que j'ai regardé beaucoup de questions similaires posées, mais toutes concernent Timestamp et DateTime type de champ, sans indexation. Au moins, c'est ma compréhension.

Comme nous le savons tous, il ya certains avantages quand il s'agit de DateTime. Les mettre de côté pendant une minute, et en supposant que la table du moteur est - InnoDB avec 10+ million records, la requête serait d'effectuer plus rapidement lorsque les critères sont basés sur:

  1. DateTime avec index
  2. int avec index

En d'autres termes, il est préférable de stocker la date et l'heure de DateTime ou le timestamp UNIX, en int? Gardez à l'esprit il n'est pas nécessaire pour tout intégré dans les fonctions de MySQL pour être utilisé.

Mise à jour

Testé avec MySQL 5.1.41 (64bit) et 10 millions de documents, les premiers essais ont montré vitesse importante différence en faveur de l' int. Deux tableaux ont été utilisés, tbl_dt avec DateTime et tbl_int avec int colonne. Quelques résultats:

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)

Je vais poster une autre mise à jour avec les deux champs dans un tableau tel que suggéré par shantanuo.

Mise à jour #2

Résultats définitifs après de nombreuses pannes de serveur :) le type Int est nettement plus rapide, n'importe ce que la requête a été exécutée, la différence de vitesse était plus ou moins le même que les résultats ci-dessus.

"Étrange" chose observée était temps d'exécution est plus ou moins la même quand, les deux types de champs sont stockés dans la même table. Il semble que MySQL est assez intelligent pour savoir quand les valeurs sont les mêmes lorsqu'ils sont stockés dans les deux DateTime et int. N'ai pas trouvé de documentation sur le sujet est donc juste une observation.

11voto

Bexol Points 41

Je vois que dans le test mentionné dans la réponse ci-dessus , l'auteur prouve essentiellement que lorsque le UNIX time est calculé à l'avance, INT gagne.

9voto

coolgeek Points 685

Mon réflexe serait de dire que ints sont toujours plus vite. Cependant, cela ne semble pas être le cas

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

Edité pour ajouter: je me rends compte que vous êtes en utilisant InnoDB, plutôt que MyISAM, mais je n'ai pas trouvé de quoi contredire ce dans le InnoDB cas. Aussi, le même auteur a fait un test InnoDB

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X