Best Practices-Handbuch zum Speichern von Daten in MySQL

Best Practices-Handbuch zum Speichern von Daten in MySQL

Vorwort

In der täglichen Entwicklung ist es häufig erforderlich, die Zeit aufzuzeichnen, beispielsweise die Erstellungszeit und die Änderungszeit eines Datensatzes. Es gibt viele Möglichkeiten, Zeit in einer Datenbank zu speichern. MySQL selbst bietet beispielsweise Datumstypen wie DATETIME, TIMESTAMEP usw. Wir können Zeitstempel auch direkt als INT-Typen speichern, und manche Leute speichern Zeit direkt als Zeichenfolgentypen.

Welche Art der Zeitspeicherung ist also besser?

Verwenden Sie keine Zeichenfolgen zum Speichern von Zeittypen

Dies ist ein Fehler, den Anfänger häufig machen. Sie neigen dazu, das Feld direkt auf den Typ VARCHAR zu setzen und Zeichenfolgen wie „2021-01-01 00:00:00“ zu speichern. Der Vorteil dabei ist natürlich, dass der Einstieg relativ einfach und leicht ist.

Davon wird jedoch dringend abgeraten, da zwei wesentliche Probleme auftreten:

  • Saiten nehmen viel Platz ein
  • Die Vergleichseffizienz derart gespeicherter Felder ist zu gering. Sie können nur Zeichen für Zeichen verglichen werden und können die von MySQL bereitgestellte Datums-API nicht verwenden.

Datumstypen in MySQL

Zu den gängigen Datumstypen in MySQL-Datenbanken gehören YEAR, DATE, TIME, DATETIME und TIMESTAMEP. Da das Datum im Allgemeinen auf die Sekunde genau sein muss, sind DATETIME und TIMESTAMEP besser geeignet.

DATETIME

DATETIME wird in der Datenbank im Format JJJJ-MM-TT HH:MM:SS gespeichert und belegt feste 8 Bytes.

Ab MySQL Version 5.6 unterstützt der Typ DATETIME Millisekunden. Das N in DATETIME(N) steht für die Millisekundengenauigkeit. Beispielsweise bedeutet DATETIME(6), dass 6 Ziffern in Millisekunden gespeichert werden können.

ZEITSTEMPELP

TIMESTAMP speichert tatsächlich die Anzahl der Millisekunden vom 01.01.1970, 00:00:00 Uhr bis zur Gegenwart. Da der TIMESTAMP-Typ in MySQL 4 Bytes belegt, beträgt die Obergrenze der gespeicherten Zeit nur „2038-01-19 03:14:07“.

Ab MySQL Version 5.6 unterstützt der TIMESTAMP-Typ auch Millisekunden. Im Gegensatz zu DATETIME belegt TIMESTAMP 7 Bytes, wenn Millisekunden eingeschlossen werden, während DATETIME 8 Bytes belegt, unabhängig davon, ob Millisekunden gespeichert werden.

Der größte Vorteil des TIMESTAMP-Typs besteht darin, dass er ein Zeitzonenattribut haben kann, da er im Wesentlichen aus Millisekunden konvertiert wird. Wenn Ihr Unternehmen unterschiedliche nationale Zeitzonen berücksichtigen muss, ist der Typ TIMESTAMP eine gute Wahl. Bei Nachrichtendiensten beispielsweise möchten Benutzer normalerweise wissen, zu welcher Uhrzeit in ihrem eigenen Land die Nachricht veröffentlicht wurde. Daher ist TIMESTAMP eine Option. Der Wert des Felds „Zeitstempeltyp“ ändert sich mit der Zeitzone des Servers und wird automatisch in die entsprechende Zeit umgewandelt. Einfach ausgedrückt ist der Wert dieses Felds unterschiedlich, wenn derselbe Datensatz in verschiedenen Zeitzonen abgefragt wird.

TIMESTAMP-Leistungsprobleme

TIMESTAMP weist auch potenzielle Leistungsprobleme auf.

Obwohl die Konvertierung von Millisekunden zum Typ TIMESTAMP selbst nicht viele CPU-Befehle erfordert, kommt es hierdurch nicht unmittelbar zu Performanceproblemen. Wenn jedoch die Standardzeitzone des Betriebssystems verwendet wird, muss bei jeder Zeitberechnung mithilfe der Zeitzone die zugrunde liegende Betriebssystemfunktion __tz_convert() aufgerufen werden. Diese Funktion erfordert zusätzliche Sperrvorgänge, um sicherzustellen, dass die Zeitzone des Betriebssystems nicht geändert wurde. Daher treten bei gleichzeitigen Zugriffen in großem Maßstab aufgrund der Konkurrenz um heiße Ressourcen zwei Probleme auf:

  • Die Leistung ist nicht so gut wie bei DATETIME: DATETIME hat keine Probleme mit der Zeitzonenkonvertierung.
  • Leistungsschwankungen: Bei massiver Parallelität kommt es zu Leistungsschwankungen.

Um die Verwendung von TIMESTAMP zu optimieren, wird empfohlen, anstelle der Zeitzone des Betriebssystems eine explizite Zeitzone zu verwenden. Legen Sie beispielsweise die Zeitzone explizit in der Konfigurationsdatei fest, anstatt die Systemzeitzone zu verwenden:

[mysqld]

Zeitzone = "+08:00"

Fassen wir die Vor- und Nachteile dieser beiden Datentypen kurz zusammen:

  • DATETIME hat keine Obergrenze für die speicherbare Zeit, während TIMESTAMP nur bis '2038-01-19 03:14:07' speichern kann.
  • DATETIME verfügt nicht über ein Zeitzonenattribut und muss vom Front-End oder Server verarbeitet werden, bietet jedoch eine bessere Leistung, wenn es nur um das Speichern und Lesen von Daten aus der Datenbank geht.
  • TIMESTAMP verfügt über ein Zeitzonenattribut, die Zeit muss jedoch jedes Mal anhand der Zeitzone berechnet werden, was bei gleichzeitigen Zugriffen zu Leistungsproblemen führen kann.
  • Das Speichern von DATETIME nimmt mehr Platz in Anspruch als TIMESTAMEP

Numerischer Zeitstempel (INT)

Oft verwenden wir zur Darstellung der Zeit auch Werte vom Typ int oder bigint, also Zeitstempel.

Diese Speichermethode bietet einige Vorteile des Zeitstempeltyps. Sie lässt sich effizienter zum Sortieren und Vergleichen von Daten verwenden und ist zudem systemübergreifend praktisch, da nur numerische Werte gespeichert werden. Der Nachteil liegt auch auf der Hand: Die Lesbarkeit der Daten ist zu schlecht und man kann die konkrete Uhrzeit nicht intuitiv erkennen.

Wenn Sie Daten innerhalb eines bestimmten Zeitraums anzeigen müssen

Wählen Sie * von t, wo erstellt am > UNIX_TIMESTAMP('2021-01-01 00:00:00');

DATETIME vs. TIMESTAMP vs. INT, was soll ich wählen?

Jede Methode hat ihre eigenen Vorteile. Hier ist ein einfacher Vergleich dieser drei Methoden:


Datumstyp Belegter Platz Datumsformat Datumsbereich Gibt es ein Zeitzonenproblem?
DATETIME 8 Byte JJJJ-MM-TT HH:MM:SS 1000-01-01 00:00:00 ~9999-12-31 23:59:59 Ja
ZEITSTEMPEL 4 Byte JJJJ-MM-TT HH:MM:SS 1970-01-01 00:00:00 ~2038-01-19 03:14:07 NEIN
INT 4 Byte Vollständiger digitaler Zeitstempel Zeit nach 1000-01-01 00:00:01 NEIN

TIMESTAMP und INT sind im Wesentlichen gleich, aber obwohl INT entwicklerfreundlich ist, ist es nicht benutzerfreundlich für DBAs und Datenanalysten und weist eine schlechte Lesbarkeit auf. Der Autor von „High Performance MySQL“ empfiehlt TIMESTAMP daher deshalb, weil sein numerischer Wert die Zeit intuitiver darstellt. Hier der Originaltext:

Was das Zeitzonenproblem betrifft, kann es einmal durch das Frontend oder den Dienst konvertiert werden und muss nicht unbedingt in der Datenbank aufgelöst werden.

Zusammenfassen

In diesem Artikel werden einige der am häufigsten verwendeten Methoden zum Speichern von Zeit verglichen. Mein Favorit ist DATETIME. Hier sind die Gründe:

  • TIMESTAMP ist besser lesbar als numerische Zeitstempel
  • Die Obergrenze der DATETIME-Speicherung liegt bei 9999-12-31 23:59:59. Wenn TIMESTAMP verwendet wird, muss eine Lösung im Jahr 2038 in Betracht gezogen werden.
  • DATETIME weist eine bessere Leistung als TIMESTAMP auf, da keine Zeitzonenkonvertierung erforderlich ist.
  • Wenn Sie die Zeit auf Millisekunden genau speichern müssen, benötigt TIMESTAMP 7 Bytes, was sich nicht wesentlich von den 8 Bytes von DATETIME unterscheidet.

Dies ist das Ende dieses Artikels über die Speicherzeit in MySQL. Weitere relevante Inhalte zur MySQL-Speicherzeit finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Windows kann den MySQL-Dienst nicht starten und meldet Fehler 1067 – Lösung
  • MySQL-Dateneinfügungsoptimierungsmethode concurrent_insert
  • Grafische Erklärung des MySQL-Abfragecaches
  • Beschreibung des MySQL-Optimierungsparameters query_cache_limit
  • Beispiel für die Implementierung von Gruppierung und Deduplizierung in einer MySQL-Tabellenverknüpfungsabfrage
  • MySQL in Windows net start mysql Beim Starten des MySQL-Dienstes tritt ein Fehler auf. Lösung für Systemfehler

<<:  Detaillierte Erläuterung des Prozesses zur Verwendung von Docker zum Erstellen einer PHP-Betriebssystemumgebung in der CentOS7-Umgebung

>>:  DIV-Hintergrund, halbtransparenter Text, nicht durchscheinender Stil

Artikel empfehlen

Erstellen von responsiven E-Mails mit Vue.js und MJML

MJML ist ein modernes E-Mail-Tool, mit dem Entwic...

So zeigen Sie die IP-Adresse von Linux in einer virtuellen VMware-Maschine an

1. Doppelklicken Sie zunächst auf das VMware-Symb...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.17

Der Blogger sagte : Ich habe eine Reihe von Blogb...

MySQL deaktiviert die Überprüfung der Kennwortstärke

Informationen zur Überprüfung der Kennwortstärke:...

Detaillierte Erklärung der sieben Datentypen in JavaScript

Inhaltsverzeichnis Vorwort: Detaillierte Einführu...

Detaillierte Erläuterung des Excel-Parsings und -Exports basierend auf Vue

Inhaltsverzeichnis Vorwort Grundlegende Einführun...

Detaillierte Erklärung der neuen CSS-Eigenschaft display:box

1. Anzeige:Box; Wenn Sie diese Eigenschaft für ei...

Ein praktischer Bericht über die Wiederherstellung einer MySQL Slave-Bibliothek

Beschreibung der Situation: Heute habe ich mich b...

Spezielle Befehle in der MySql-Datenbankabfrage

Erstens: Installation von MySQL Laden Sie die MyS...

Detaillierte Erklärung zur Verwendung von this.$set in Vue

Inhaltsverzeichnis Verwendung von this.$set in Vu...

Schritte und Fallstricke beim Upgrade von Linux MySQL 5.5 auf MySQL 5.7

Inhaltsverzeichnis Linux MySQL 5.5 auf MySQL 5.7 ...