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:
- DateTime avec index
- 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.