web-dev-qa-db-fra.com

MySQL Integer vs DateTime index

Permettez-moi de commencer par dire que j'ai examiné de nombreuses questions similaires, mais qu'elles concernent toutes le type de champ Timestamp et DateTime sans indexation. Au moins c'est ce que je comprends. 

Comme nous le savons tous, il existe certains avantages en ce qui concerne DateTime. Mettez-les de côté pendant une minute, en supposant que le moteur de table est InnoDB avec 10+ million records, requête qui s'exécutera plus rapidement lorsque le critère est basé 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 sous la forme DateTime ou l’horodatage UNIX dans int? Gardez à l'esprit qu'il n'est pas nécessaire d'utiliser des fonctions MySQL intégrées.

Mettre à jour

Testé avec MySQL 5.1.41 (64 bits) et 10 millions d’enregistrements, les tests initiaux ont montré une différence de vitesse significative en faveur de int. Deux tables ont été utilisées, tbl_dt avec DateTime et tbl_int avec la colonne int. Peu de 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 posterai une autre mise à jour avec les deux champs dans une table, comme suggéré par shantanuo .

Mise à jour # 2

Résultats finaux après de nombreuses pannes du serveur :) Le type Int est nettement plus rapide, quelle que soit la requête exécutée, la différence de vitesse était plus ou moins identique à celle des résultats précédents.

La chose "étrange" observée était que le temps d'exécution était plus ou moins le même quand deux types de champs sont stockés dans la même table. Il semble que MySQL soit assez intelligent pour déterminer quand les valeurs sont identiques lorsqu'elles sont stockées à la fois dans DateTime et int. N'ayant trouvé aucune documentation sur le sujet, il ne s'agit donc que d'une observation.

38
David Kuridža

Mon instinct serait de dire que les ints sont toujours plus rapides. 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/

Ajoutés pour ajouter: Je réalise que vous utilisez InnoDB, plutôt que MyISAM, mais je n'ai rien trouvé qui puisse contredire cela dans l'affaire InnoDB. En outre, 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/

5
coolgeek

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

10
Bexol

cela dépend de votre application, comme vous pouvez le voir dans une comparaison impressionnante et une référence de type DATETIME, TIMESTAMP et INT dans le serveur Mysql dans Format de date MySQL: Quel type de données devriez-vous utiliser? Nous comparons Datetime, Timestamp et INT. vous pouvez voir que, dans certaines situations, INT a une meilleure performance que d’autres et, dans certains cas, DATETIME a de meilleures performances. et Cela dépend complètement de votre application

0
Yusef Mohamadi