2013-08-21 19 views
15

Ich verwende in der Regel Datetime Feld zu speichern created_time aktualisiert Zeit der Daten innerhalb einer Anwendung.Datetime vs Datum und Uhrzeit Mysql

Aber jetzt bin ich auf eine Datenbanktabelle gestoßen, in der sie Datum und Zeit getrennte Felder in der Tabelle hielten.

  1. Also, was sind die Schemata, in denen zwei davon verwendet werden sollten und warum?
  2. Was sind Vor- und Nachteile bei der Verwendung von zwei?
+1

Ich überlege, auf separate Datums- und Uhrzeitfelder umzuschalten.Meine Situation ist, dass ich in der Lage sein muss, TBD-Zeiten zu speichern, wenn ich das Datum kenne. Momentan verwende ich 12AM als meinen Wert für 'TBD'-Zeiten, aber es erweist sich als mehr Mühe, als ich möchte. Hat jemand eine bessere Lösung für TBD-Zeiten gefunden? oder hat mein vorgeschlagener Methodenarbeiter besser für sie? –

Antwort

23

Ich denke, es gibt grundsätzlich keine Vorteile, das Datum und die Uhrzeit in separaten Feldern zu speichern. MySQL bietet sehr komfortable Funktionen zum Extrahieren der Datums- und Zeitanteile eines datetime Wertes.

Okay. Es kann einige Effizienzgründe geben. In MySQL können Sie separate Indizes für die Felder einfügen. Wenn Sie beispielsweise nach bestimmten mal suchen möchten, kann eine Abfrage, die nach Stunden des Tages zählt (z. B.), einen Index für das Feld time verwenden. Ein Index auf einem datetime Feld würde in diesem Fall nicht verwendet werden. Ein separates Feld date könnte es einfacher machen, eine Abfrage zu schreiben, die den date Index verwendet, aber streng genommen sollte auch ein datetime funktionieren.

Das eine Mal, wo ich Daten und Zeiten separat gespeichert habe, ist in einem Handelssystem. In diesem Fall hat der Handel ein Bewertungsdatum. Die Bewertungszeit ist etwas wie "NY Open" oder "London Close" - das ist kein Echtzeitwert. Es ist eine Beschreibung der Tageszeit, die für die Bewertung verwendet wird.

1

Der schwierige Teil ist, wenn Sie Datum Arithmetik auf einen Zeitwert tun müssen und Sie nicht möchten, dass ein Datum Teil in den Mix kommt. Ex:

myapptdate = 2014-01-02 09:00:00

Wählen Sie so und so, wo myapptdate zwischen 2014.01.02 07.00.00 und 13.00.00 2014.01.02

1900-01-02 07:00:00 2014-01-02 07:00:00

25

Es gibt einen großen Unterschied in der Leistung, wenn sie über DATETIME- Feld DATE Feld. Ich habe eine Tabelle mit mehr als 4.000.000 Datensätzen und zu Testzwecken habe ich zwei Felder mit jeweils einem eigenen Index hinzugefügt. Einer verwendet DATETIME und das andere Feld verwendet DATE.

ich deaktiviert MySQL Query-Cache in der Lage richtig zu testen und geschlungen über die gleiche Abfrage für 1000x:

SELECT * FROM `logs` WHERE `dt` BETWEEN '2015-04-01' AND '2015-05-01' LIMIT 10000,10; DATETIME- INDEX: 197,564 Sekunden.

SELECT * FROM `logs` WHERE `d` BETWEEN '2015-04-01' AND '2015-05-01' LIMIT 10000,10; DATUM INDEX: 107,577 Sekunden.

Die Verwendung eines Datumsindizierten Feldes hat eine Leistungsverbesserung von: 45,55% !!

Also würde ich sagen, wenn Sie eine Menge Daten in Ihrer Tabelle erwarten, beachten Sie bitte bei der Trennung des Datums von der Zeit mit ihrem eigenen Index.