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

CSS3 verwendet scale() und rotate() zum Zoomen und Drehen

1. scale()-Methode Zoom steht für „Verkleinern“ u...

MySQL-Datenbankbeschränkungen und Prinzipien des Datentabellenentwurfs

Inhaltsverzeichnis 1. Datenbankbeschränkungen 1.1...

Analyse und Beschreibung von Netzwerkkonfigurationsdateien unter Ubuntu-System

Ich bin heute auf ein seltsames Netzwerkproblem g...

Detaillierte Erklärung der Vue px-zu-rem-Konfiguration

Inhaltsverzeichnis Methode 1 1. Konfigurations- u...

Implementierung des Deployment-War-Package-Projekts mit Docker

Um War mit Docker bereitzustellen, müssen Sie ein...

Einführung in das Layout des HTML-Seitenquellcodes_Powernode Java Academy

Einführung in das Layout des HTML-Seitenquellcode...

So starten Sie Tomcat mit jsvc (als normaler Benutzer ausführen)

Einführung in jsvc In der Produktion sollte Tomca...

Eine kurze Diskussion über die MySQL-Optimierungslösung für große Tabellen

Hintergrund Die Menge neuer Daten in der Geschäft...

Praktischer Bericht über die Entwicklung von Vue3- und TypeScript-Projekten

Inhaltsverzeichnis Überblick 1. Kompositions-API ...

Lassen Sie uns im Detail darüber sprechen, wie Browser Abschlüsse betrachten

Inhaltsverzeichnis Vorwort Einführung in Closures...