Wir schreiben ein wissenschaftliches Tool mit MySQL-Unterstützung. Das Problem ist, wir brauchen Mikrosekundengenauigkeit für unsere Datetime-Felder, die MySQL derzeit nicht unterstützt. Ich sehe hier mindestens zwei Problemumgehungen:
Die populärste Abfrage wählt Spalten aus, die einem Zeitintervall entsprechen (d. h. dt_record & gt; time1 und dt_record & lt; time2).
Welche dieser Methoden (oder vielleicht eine andere) bietet wahrscheinlich eine bessere Leistung bei großen Tabellen (Millionen von Zeilen)?
Wenn Sie sagen, dass die beliebtesten Abfragen Zeitbasis sind, würde ich empfehlen, mit einer einzelnen Spalte zu gehen, die die Zeit wie in Ihrer ersten Option speichert .
Sie könnten Ihre eigene Epoche für die Anwendung auswählen und von dort aus arbeiten.
Dies sollte die Abfragen vereinfachen, die beim Suchen nach Zeitintervallen geschrieben werden müssen.
Sehen Sie sich auch 10.3.1 an. Die Typen DATETIME, DATE und TIMESTAMP
Allerdings können Mikrosekunden nicht gespeichert werden in eine Spalte mit beliebigen zeitlichen Daten Art. Jeder Mikrosekunde Teil ist verworfen. Umwandlung von TIME oder DATETIME-Werte in numerischer Form (für Beispiel, indem Sie +0) hinzufügen, ergibt a Doppelter Wert mit einem Mikrosekunden-Anteil von .000000
MySQL unterstützt Mikrosekunden, siehe MySQL 5.6.4 changelog :
Bruch Sekunden Behandlung
Inkompatible Änderung: MySQL erlaubt jetzt Bruch Sekunden für TIME, DATETIME- und TIMESTAMP-Werte mit bis zu Mikrosekunden (6 Ziffern) Präzision. Um eine Spalte zu definieren, die einen Sekundenbruchteil enthält, Verwenden Sie die Syntax type_name (fsp), wobei type_name für TIME, DATETIME oder steht TIMESTAMP und fsp ist die Sekundenbruchteile-Genauigkeit. Zum Beispiel:
CREATE TABLE t1 (t ZEIT (3), dt DATENZEIT (6)); Der fsp-Wert, falls angegeben, muss im Bereich von 0 bis 6 liegen. Ein Wert von 0 bedeutet, dass es keine gibt Bruchteil. Wenn nicht angegeben, ist die Standardgenauigkeit 0. (Dies ist unterschiedlich von der Standard-SQL-Standard von 6, für die Kompatibilität mit vorherigen MySQL-Versionen.)
Die folgenden Punkte fassen die Auswirkungen dieser Änderung zusammen. Sehen auch Abschnitt 10.3.5, "Sekundenbruchteile in Zeitwerten".
Wie wäre es, die Datumsteile in einen Nur-Datum-Teil und Mikrosekunden von Mitternacht aufzuteilen? Es gibt weniger als 2 ^ 64 Mikrosekunden am Tag. Dann clustern Sie die Tabelle am {date, microsecond}.
Ich schätze, obwohl ich Ihre Daten nicht kenne, dass bestimmte Abfragen mit der Genauigkeit des Tagesablaufs in Ordnung sind - "Experimente im Jahr 1964" müssen sich keine Sorgen über Mikrosekunden machen.
Tags und Links datetime mysql performance time-precision