In der MySQL-Datenbank werden datetime, bigint und timestamp zur Darstellung der Zeitauswahl verwendet. Welches davon ist für die Zeitspeicherung am effizientesten?

In der MySQL-Datenbank werden datetime, bigint und timestamp zur Darstellung der Zeitauswahl verwendet. Welches davon ist für die Zeitspeicherung am effizientesten?

In der Datenbank können datetime, bigint und timestamp zur Darstellung der Zeit verwendet werden. Welcher Typ ist also für die Zeitspeicherung besser geeignet?

# Nachbereitung der Daten

Fügen Sie über das Programm 50 W-Daten in die Datenbank ein

Datenblatt:

CREATE TABLE `Benutzer` (
  `id` int(11) NICHT NULL AUTO_INCREMENT,
  `time_date` Datum/Uhrzeit NICHT NULL,
  `time_timestamp` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP,
  `time_long` bigint(20) NICHT NULL,
  Primärschlüssel (`id`),
  SCHLÜSSEL `time_long` (`time_long`),
  SCHLÜSSEL `time_timestamp` (`time_timestamp`),
  SCHLÜSSEL `time_date` (`time_date`)
) ENGINE=InnoDB AUTO_INCREMENT=500003 DEFAULT CHARSET=latin1

Unter diesen sind time_long, time_timestamp und time_date unterschiedliche Speicherformate für dieselbe Zeit.

Entitätsklassenbenutzer

/**
 * @Autor hetiantian
 * @Datum 21.10.2018
 * */
@Erbauer
@Daten
öffentliche Klasse Benutzer {
    /**
     * Selbstinkrementierende eindeutige ID
     * */
    private lange ID;

    /**
     * Datum Typ Uhrzeit * */
    privates Datum UhrzeitDatum;

    /**
     *Zeit des Zeitstempeltyps* */
    privater Zeitstempel timeTimestamp;

    /**
     * Lange Tippzeit * */
    privat lange ZeitLang;
}

DAO-Schichtschnittstelle

/**
 * @Autor hetiantian
 * @Datum 21.10.2018
 * */
@Mapper
öffentliche Schnittstelle UsersMapper {
    @Insert("Einfügen in Benutzer(Zeit_Datum, Zeit_Zeitstempel, Zeit_Lang) Wert(#{timeDate}, #{timeTimestamp}, #{timeLong})")
    @Options(useGeneratedKeys = true,Schlüsseleigenschaft = "id",Schlüsselspalte = "id")
    int saveUsers(Benutzer Benutzer);
}

Die Testklasse fügt Daten in die Datenbank ein

öffentliche Klasse UsersMapperTest erweitert BaseTest {
    @Ressource
    privater UsersMapper BenutzerMapper;

    @Prüfen
    öffentlicher void-Test () {
        für (int i = 0; i < 500000; i++) {
            lange Zeit = System.currentTimeMillis();
            usersMapper.saveUsers(Users.builder().timeDate(neues Datum(Zeit)).timeLong(Zeit).timeTimestamp(neuer Zeitstempel(Zeit)).build());
        }
    }
}

Um Datencode zu generieren, gehen Sie zu GitHub: https://github.com/TiantianUpup/sql-test/. Wenn Sie keine Codegenerierung verwenden möchten, sondern Daten über eine SQL-Datei importieren möchten, ist die Netzwerkdatenträgeradresse der SQL-Datei am Ende des Artikels angehängt.

# SQL-Abfrageratentest

Abfrage nach Datums-/Uhrzeittyp:

Wählen Sie count(*) aus Benutzern aus, wobei time_date >="2018-10-21 23:32:44" und time_date <="2018-10-21 23:41:22"

Benötigte Zeit: 0,171

Abfrage nach Zeitstempeltyp

Wählen Sie count(*) aus Benutzern aus, wobei time_timestamp >= "2018-10-21 23:32:44" und time_timestamp <="2018-10-21 23:41:22"

Benötigte Zeit: 0,351

Abfrage nach Bigint-Typ

Wählen Sie count(*) aus Benutzern aus, wobei time_long >=1540135964091 und time_long <=1540136482372

Dauer: 0,130 s

Fazit: Unter der InnoDB-Speicher-Engine ist die Leistung der Suche nach Zeitbereich bigint > datetime > timestamp

# SQL-Gruppenratentest


Wenn Sie Bigint zum Gruppieren verwenden, werden alle Daten gruppiert. Wenn Bigint vor dem Gruppieren konvertiert wird, ist ein Vergleich sinnlos. Die Konvertierung nimmt außerdem Zeit in Anspruch.

Gruppieren nach Datums-/Uhrzeittyp:

Wählen Sie time_date, count(*) aus der Benutzergruppe nach time_date

Dauer: 0,176 s

Gruppieren nach Zeitstempeltyp:

Wählen Sie time_timestamp, count(*) aus der Benutzergruppe nach time_timestamp

Dauer: 0,173 s

Fazit: Unter der InnoDB-Speicher-Engine ist die Leistung bei der Zeitgruppierung von Zeitstempel > Datum/Uhrzeit, der Unterschied ist jedoch nicht groß.

# SQL-Sortierratentest

Nach Datums-/Uhrzeittyp sortieren:

Wählen Sie * aus den Benutzern aus, sortiert nach Zeit_Datum

Benötigte Zeit: 1.038s

Nach Zeitstempeltyp sortieren

Wählen Sie * aus der Benutzerreihenfolge nach Zeit_Zeitstempel aus.

Dauer: 0,933 s

Nach Bigint-Typ sortieren

Wählen Sie * aus den Benutzern aus, sortiert nach time_long

Dauer: 0,775 s

Fazit: Unter der InnoDB-Speicher-Engine ist die Leistung von bigint > timestamp > datetime durch Zeitsortierung

# Zusammenfassung

Wenn Sie das Zeitfeld bearbeiten müssen (z. B. Suchen oder Sortieren nach Zeitbereich usw.), wird die Verwendung von Bigint empfohlen. Wenn das Zeitfeld keine Operation benötigt, wird die Verwendung von Zeitstempel empfohlen. Die Verwendung von 4 Bytes zum Speichern von Speicherplatz ist praktischer, aber die aufgezeichnete Zeit ist auf 2038 begrenzt.

Die SQL-Datei-Netzwerkfestplattenadresse im Artikel: Link: https://pan.baidu.com/s/1cCRCxtTlPriXMERGsbnb_A Extraktionscode: hbq2

Damit ist dieser Artikel über die Auswahl zwischen datetime, bigint und timestamp zur Darstellung der Zeit in MySQL-Datenbanken und die effizienteste Methode zur Zeitspeicherung abgeschlossen. Weitere Informationen zu datetime, bigint und timestamp in Datenbanken finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Fallstricke von DTS, die durch die Zeitstempel- und Datums-/Uhrzeitzonenprobleme in MySQL verursacht werden
  • Der Unterschied und die Wahl zwischen Datum und Uhrzeit und Zeitstempel in MySQL
  • Der Unterschied und die Verwendung von Datum/Uhrzeit und Zeitstempel in MySQL
  • Datums-/Uhrzeit- und Zeitstempelvergleich in MySQL
  • Zusammenfassung der Verwendung von Datetime und Timestamp in MySQL

<<:  10 Dinge, die exzellente Webentwickler wissen müssen, um ihre Entwicklungsfähigkeiten zu verbessern

>>:  Eine kurze Analyse der CSS-Funktionen :is() und :where(), die bald in Browsern verfügbar sein werden

Artikel empfehlen

Einige Vorschläge zur Linux-Systemoptimierung (Kerneloptimierung)

Swap deaktivieren Wenn auf dem Server ein Datenba...

js implementiert das klassische Minesweeper-Spiel

In diesem Artikelbeispiel wird der spezifische Co...

Methode zur Optimierung von MySQL-Gruppenabfragen

MySQL behandelt GROUP BY- und DISTINCT-Abfragen i...

Verwendung des SerialPort-Moduls in Node.js

Inhaltsverzeichnis Zweck Modulinstallation Grundl...

Detaillierte Erklärung zur Verwendung von MySQL-Gruppenlinks

Gruppieren und Verknüpfen sind in MySQL die beide...

So implementieren Sie die jQuery-Karussellfunktion

In diesem Artikel wird der Implementierungscode d...

Textarea-Tag in HTML

<textarea></textarea> wird verwendet,...

Eine kurze Erläuterung zu Leerzeichen und Leerzeilen im HTML-Code

Alle aufeinanderfolgenden Leerzeichen oder Leerze...

CSS imitiert Fernbedienungstasten

Hinweis: Diese Demo wurde in der Miniprogrammumge...

JavaScript-Makrotasks und Mikrotasks

Makrotasks und Mikrotasks JavaScript ist eine Sin...

Eine vorläufige Studie zum Vue-Unit-Testing

Inhaltsverzeichnis Vorwort Warum Unit-Tests einfü...

Ein Problem mit der Bereitstellung von MySQL 5.5

MySQL-Bereitstellung Derzeit stellt das Unternehm...