Question

nous écrivons un outil scientifique avec le support de MySQL. Le problème est, nous avons besoin de précision microseconde pour nos champs datetime, qui MySQL ne prennent pas en charge. Je vois au moins deux solutions de contournement ici:

  • En utilisant une décimale () type de colonne, avec une partie entière correspondant à quelques secondes depuis un moment (je doute que l'époque UNIX va faire, puisque nous devons stocker des mesures prises dans des années 60 et 50.).
  • L'utilisation de deux colonnes de nombre entier, pour une seconde, l'autre pour microsecondes.

La requête la plus populaire est la sélection de colonnes correspondant à un intervalle de temps (à savoir dt_record> time1 et dt_record

Laquelle de ces méthodes (ou peut-être un autre) est susceptible d'offrir de meilleures performances dans le cas des grandes tables (en millions de lignes)?

Était-ce utile?

La solution

Si vous dites que les requêtes les plus populaires sont la base de temps, Je recommanderais d'aller avec une seule colonne qui stocke le temps comme dans votre première option .

Vous pouvez choisir votre propre époque pour l'application, et de travailler à partir de là.

Cela devrait simplifier les requêtes qui doit être écrite lors de la recherche des intervalles de temps.

Voir aussi 10.3.1. Les DATETIME, DATE, et types TIMESTAMP

  

Cependant, microsecondes ne peuvent pas être stockés   dans une colonne de toute donnée temporelle   type. Toute partie microsecondes est   mis au rebut. Conversion de temps ou   Les valeurs datetime sous forme numérique (pour   exemple, en ajoutant +0) se traduit par un   valeur double avec une partie microsecondes   de 0,000000

Autres conseils

MySQL soutiendra microsecondes, consultez 5.6 MySQL .4 changelog:

  

fractionnaires secondes manutention

     

Incompatible Change: MySQL permet maintenant des fractions de seconde TIME,   DATETIME, et les valeurs TIMESTAMP, avec un maximum de microsecondes (6 chiffres)   précision. Pour définir une colonne qui comprend une fraction de seconde,   utilisez la syntaxe nom_type (fsp), où nom_type est le temps, DATETIME, ou   TIMESTAMP et FSP est la précision des fractions de seconde. Par exemple:

     

CREATE TABLE t1 (t TIME (3), dt DATETIME (6)); La valeur FSP, si elle est donnée,   doit être comprise entre 0 à 6. Une valeur de 0 signifie qu'il n'y a   partie fractionnaire. En cas d'omission, la précision par défaut est 0. (Cela diffère   à partir de la valeur par défaut SQL standard de 6, pour la compatibilité avec les précédents   MySQL versions.)

     

Les éléments suivants résument les implications de ce changement. Voir   également la section 10.3.5, « Secondes fractionnaires valeurs de temps ».

Que diriez-vous séparer les parties de date dans une partie de date uniquement, et microsecondes de minuit? Il y a moins de 2 ^ 64 microsecondes dans la journée. Ensuite, regrouper le tableau {date, microseconde}.

Je suppose que, si je ne sais pas vos données, que certaines requêtes seraient très bien avec précision au niveau de jour - « expériences en 1964 » n'a pas besoin de se soucier de microsecondes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top