full Entier MySQL vs Index DateTime



mysql fulltext mode (3)

Permettez-moi de commencer en disant que j'ai regardé de nombreuses questions similaires posées, mais toutes se rapportent au type de champ Timestamp et DateTime sans indexation. Au moins c'est ma compréhension.

Comme nous le savons tous, il y a certains avantages en ce qui concerne DateTime. Les mettre de côté pendant une minute, et en supposant que le moteur de table est InnoDB avec plus de 10+ million records , quelle requête serait plus rapide 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 en tant que horodatage DateTime ou 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 (64bit) 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 une colonne int . 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 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 nombreux pannes de serveur :) Le type Int est significativement plus rapide, quelle que soit la requête exécutée, la différence de vitesse était plus ou moins la même que les résultats ci-dessus.

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


Answer #1

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/

Edité pour ajouter: Je me rends compte que vous utilisez InnoDB, plutôt que MyISAM, mais je n'ai rien trouvé de contradictoire 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/







innodb