Datetime vs Date et heure Mysql
J'utilise généralement champ datetime pour stocker created_time heure de mise à jour des données dans une application.
Mais maintenant j'ai trouver une table de base de données où ils ont gardé la date et l'heure de séparer les champs dans la table.
- Quels sont donc le schéma dans lequel deux de ceux-ci devraient être utilisés et pourquoi?
- Quels sont les avantages et les inconvénients attachés à l'aide de deux?
source d'informationauteur abhinsit | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
J'ai tendance à penser qu'il existe, en gros, plus les avantages pour le stockage de la date et de l'heure dans des champs séparés. MySQL propose des fonctions pratiques pour l'extraction de la date et de l'heure de pièces de un
datetime
valeur.D'accord. Il peut y avoir quelques raisons d'efficacité. Dans MySQL, vous pouvez mettre des index sur les champs. Donc, si vous voulez la recherche pour particulier foispar exemple, une requête qui compte les heures de la journée (par exemple) peut utiliser un index sur la
time
champ. Un index sur unedatetime
domaine ne peut pas être utilisé dans ce cas. Séparédate
dans le domaine de la rendre plus facile à écrire une requête qui va utiliser ledate
index, mais, à strictement parler, undatetime
devrait également fonctionner.La seule fois où j'ai vu les dates et les heures stockés séparément dans un système d'échange. Dans ce cas, le commerce a une date d'évaluation. L'heure d'évaluation est quelque chose comme "NY Ouvrir" ou "London Proche" -- ce n'est pas une valeur temps réel. C'est une description de l'heure de la journée utilisés pour l'évaluation.
Il y a une énorme différence en termes de performances lors de l'utilisation de champ de DATE au-dessus du champ date /heure. J'ai une table avec plus de 4.000.000 d'enregistrements et à des fins de test, j'ai ajouté 2 champs à la fois avec leur propre index. Une utilisation de type DATETIME et l'autre champ à l'aide de la DATE.
J'ai désactivé MySQL query cache pour pouvoir tester correctement et en boucle sur la même requête pour 1000x:
SELECT * FROM `logs` WHERE `dt` BETWEEN '2015-04-01' AND '2015-05-01' LIMIT 10000,10;
DATETIME INDEX:
197.564 secondes.
SELECT * FROM `logs` WHERE `d` BETWEEN '2015-04-01' AND '2015-05-01' LIMIT 10000,10;
DATE DE L'INDEX:
107.577 secondes.
À l'aide d'une date de champ indexé a une amélioration des performances de l': 45.55%!!
Donc je dirais que si vous vous attendez à un grand nombre de données dans votre tableau, veuillez considérer en séparant la date de l'heure avec leur propre index.
La partie la plus délicate, c'est quand vous avez à faire des opérations arithmétiques sur une valeur de temps et vous ne voulez pas une partie date à venir dans le mélange. Ex:
myapptdate = 2014-01-02 09:00:00
Sélectionner tel ou tel où myapptdate entre 2014-01-02 07:00:00 et 2014-01-02 13:00:00
1900-01-02 07:00:00
2014-01-02 07:00:00