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

Tutorial-Diagramm zur Installation von mysql8.0.18 unter Linux (Centos7)

1 Holen Sie sich das Installationsressourcenpaket...

Beispiel für eine Vue-Datenanzeige auf einem großen Bildschirm

Um die Anforderungen effizient zu erfüllen und au...

MySQL-Lösung zum Erstellen eines horizontalen Histogramms

Vorwort Histogramme sind grundlegende statistisch...

Welche Vorteile bietet die Verwendung eines B+-Baums als Indexstruktur in MySQL?

Vorwort In MySQL verwenden sowohl Innodb als auch...

Vue macht Div-Höhe verschiebbar

In diesem Artikel wird der spezifische Code von V...

Centos6.9-Installation Mysql5.7.18 Schrittaufzeichnung

Installationsreihenfolge rpm -ivh mysql-community...

MySQL ruft die aktuelle Datums- und Uhrzeitfunktion ab

Holen Sie sich das aktuelle Datum + die aktuelle ...

Codebeispiel für die Implementierung des Linux-Verzeichniswechsels

Das Wechseln von Dateien ist eine gängige Operati...

So erstellen Sie ein standardisiertes VMware-Image für Kubernetes unter Rancher

Wenn wir Kubernetes lernen, müssen wir in der Kub...

Eine einfache Methode zum Ändern der Größe hochgeladener Nginx-Dateien

Originallink: https://vien.tech/article/138 Vorwo...

Tutorial zur Nginx-Standortkonfiguration von Grund auf

Grundlagen Die Reihenfolge der Standortübereinsti...

Teilen Sie 12 häufig verwendete Loader in Webpack (Zusammenfassung)

Inhaltsverzeichnis Vorwort Stillader CSS-Lader Sa...