Frage

Wir sind ein wissenschaftliches Werkzeug mit MySQL-Unterstützung zu schreiben. Das Problem ist, wir mikrosekundengenau für unsere Datetime-Felder benötigen, die MySQL unterstützt derzeit keine. Ich sehe mindestens zwei Abhilfen hier:

  • eine Dezimalzahl () Spaltentyp Verwendung mit ganzzahligen Teil seit einem bestimmten Zeitpunkt auf Sekunden entspricht (I bezweifeln, dass UNIX-Epoche tun wird, da wir zum Speichern von Messungen in 60 und 50er Jahren genommen haben).
  • Verwenden von zwei Integer-Spalten, eine für Sekunden, die andere für Mikrosekunden.

Die populärste Abfrage Spalten entsprechend einem Zeitintervall der Auswahl (d.h. dt_record> time1 und dt_record

Welche dieser Methoden (oder vielleicht ein anderes) ist wahrscheinlich eine bessere Leistung im Falle von großen Tabellen (in Millionen Zeilen) zur Verfügung zu stellen?

War es hilfreich?

Lösung

Wenn Sie sagen, dass die beliebtestenen Abfragen sind Zeitbasis, Ich würde mit einer einzigen Spalte recomend gehen, dass speichert die Zeit, als in Ihrer ersten Option .

Sie können Ihre eigene Epoche für die Anwendung auszuwählen, und von dort aus arbeiten.

Dies sollte die Abfragen vereinfachen, dass Bedürfnisse geschrieben werden, wenn für die Zeitintervalle zu suchen.

Haben Sie auch einen Blick auf 10.3.1. Die DATETIME-, DATE und TIMESTAMP-Typen

  

Allerdings Mikrosekunden können nicht gespeichert werden   in eine Spalte von jeder temporale Daten   Art. Jeder Mikrosekunden Teil ist   verworfen. Die Umwandlung von TIME oder   Datums- und Uhrzeitwerte in numerischer Form (für   beispielsweise durch Zugabe von +0) zu einem   Doppel Wert mit einem Mikrosekunde Teil   von 0,000000

Andere Tipps

MySQL Mikrosekunden unterstützen, finden Sie MySQL 5.6 0,4 Changelog :

  

Fractional Sekunden Handhabung

     

Inkompatible Änderung: MySQL jetzt Sekundenbruchteile für die Zeit erlaubt,   DATETIME-, und Zeitstempelwerte mit bis zu Mikrosekunden (6-stellig)   Präzision. Zu definieren, eine Spalte, die einen Bruchteil Sekunden umfasst,   die Syntax type_name (FSP), wobei type_name der Zeit ist, DATETIME- oder   TIMESTAMP und fsp ist die Sekundenbruchteile Präzision. Zum Beispiel:

     

CREATE TABLE t1 (t Zeit (3), dt DATETIME- (6)); Der FSP-Wert, falls gegeben,   muss im Bereich von 0 bis 6. Ein Wert von 0 bedeutet, dass es keine ist   Bruchteil. Wenn nicht angegeben, ist die Standardgenauigkeit 0. (Dies unterscheidet sich   von dem Standard-SQL-Standardwert von 6, um die Kompatibilität mit früheren   MySQL-Versionen.)

     

Die folgenden Punkte fassen die Auswirkungen dieser Änderung. Sehen   auch Abschnitt 10.3.5, „Fractional Sekunden in Zeitwerte“.

Wie wäre es Splitting die Datumsteile in ein Datums nur ein Teil, und Mikrosekunden ab Mitternacht? Es gibt weniger als 2 ^ 64 Mikrosekunden in dem Tag. Dann Cluster in der Tabelle auf {date, Mikrosekunde}.

Ich würde vermuten, obwohl ich Ihre Daten nicht wissen, dass bestimmte Abfragen fein mit Tag-Level-Genauigkeit wären - Experimente im Jahr 1964 'muss nicht Sorgen um Mikrosekunden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top