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

Neues CSS3-Layout: ausführliche Flex-Erklärung

Flex-Grundkonzepte Flex-Layout (Flex ist die Abkü...

So überprüfen Sie, ob der Grafiktreiber erfolgreich in Ubuntu installiert wurde

Führen Sie den Befehl aus: glxinfo | grep renderi...

So installieren und konfigurieren Sie Redis in CentOS7

Einführung Es ist nicht nötig, Redis im Detail vo...

CSS erzielt farbenfrohe und intelligente Schatteneffekte

Hintergrund Haben Sie sich jemals gefragt, wie Si...

Verwenden Sie das ab-Tool, um einen API-Stresstest auf dem Server durchzuführen

Inhaltsverzeichnis 1 Eine kurze Einführung in den...

So konfigurieren Sie Anti-Hotlinking für den Nginx-Websitedienst (empfohlen)

1. Prinzip des Hotlinking 1.1 Vorbereitung der We...

So legen Sie Hintergrundfarbe und Transparenz in Vue fest

Einstellungen für Hintergrundfarbe und Transparen...

Warum wird in React nicht empfohlen, einen Index als Schlüssel zu verwenden?

1. Vergleichen Sie den alten virtuellen DOM mit d...

Problem mit der Parameterübergabe beim Sprung auf HTML-Seite

Die Wirkung ist wie folgt: eine Seite Nach dem Kl...

React-Konfiguration px-Konvertierung rem-Methode

Installieren Sie zugehörige Abhängigkeiten npm ic...