Vergleich der Leistung von int, char und varchar in MySQL

Vergleich der Leistung von int, char und varchar in MySQL

Im Internet kursieren viele scheinbar wahre „Gerüchte“. Natürlich sind sie nicht böswillig. Die meisten davon sind darauf zurückzuführen, dass Entwickler nicht bereit sind, selbst Nachforschungen anzustellen, sondern stattdessen glauben, was andere sagen.

Es gibt auch viele Gerüchte über Datenbanken, wie z. B. „Die Leistung von int ist viel höher als die von char“.

Ich habe vor Kurzem einen Leistungstest mit int, long, char und varchar durchgeführt und festgestellt, dass zwischen ihnen tatsächlich kein großer Leistungsunterschied besteht:

Hinweis: c8=char(8), s8=varchar(8), i8=(bigint), c4=char(4), s4=varchar(4), i4=char(4)

1 Million Zeilen ohne Index abfragen:

Führen Sie [c8-Abfrage] 20 Mal aus, durchschnittlicher Zeitaufwand 312,0 ms
Führen Sie [s8 query] 20 Mal aus, durchschnittlicher Zeitaufwand 334,3 ms
[i8-Abfrage] 20-mal ausführen, durchschnittlicher Zeitaufwand 276,95 ms
Führen Sie [c4 query] 20 Mal aus, durchschnittlicher Zeitaufwand 354,95 ms
Führen Sie [s4 query] 20 Mal aus, durchschnittlicher Zeitaufwand 340,45 ms
Führen Sie [i4-Abfrage] 20 Mal aus. Die durchschnittliche Dauer beträgt 291,1 ms.

Erstellen Sie einen Index:

Die C8-Indizierung dauerte 2439 ms
Die S8-Indizierung dauerte 2442 ms
Die i8-Indizierung dauerte 1645 ms
Die C4-Indizierung dauerte 2296 ms.
Die S4-Indizierung dauerte 2303 ms
Die i4-Indizierung dauerte 1403 ms

Abfrage mit Index:

Führen Sie [c8-Abfrage] 10.000 Mal aus, durchschnittlicher Zeitaufwand 0,271 ms
Führen Sie [s8 query] 10000 Mal aus, der durchschnittliche Zeitaufwand beträgt 0,2354 ms.
Führen Sie [i8-Abfrage] 10.000 Mal aus. Der durchschnittliche Zeitaufwand beträgt 0,2189 ms.
Führen Sie [c4 query] 10000 Mal aus, der durchschnittliche Zeitaufwand beträgt 0,303 ms.
Führen Sie [s4 query] 10000 Mal aus, durchschnittlicher Zeitaufwand 0,3094 ms
Führen Sie [i4-Abfrage] 10.000 Mal aus. Die durchschnittliche Dauer beträgt 0,25 ms.

abschließend:

Kein Index: Der vollständige Tabellenscan wird nicht schneller, weil die Daten kleiner sind, aber die Gesamtgeschwindigkeit ist gleich, int/bigint als native Typen ist um 12 % etwas schneller.

Mit Index: char und varchar haben eine ähnliche Leistung, int ist um 18 % etwas schneller

In Bezug auf die Datenspeicherung sowie das Lesen und Schreiben verhalten sich Ganzzahlen und Zeichenfolgen gleicher Länge gleich, aber varchar hat ein zusätzliches Byte, sodass die Leistung leicht beeinträchtigt sein kann (1/n).

Bei Datenoperationen und Vergleichen profitieren Integer von der nativen Unterstützung und sind daher etwas schneller als Strings.

Bei Verwendung von Indizes ist der Leistungsunterschied zwischen Ganzzahlen und Zeichenfolgen sogar noch geringer.

In der tatsächlichen Entwicklung verwenden viele Entwickler häufig Zeichenfolgen wie char(1) und char(4), um Typaufzählungen darzustellen. Meiner Meinung nach ist dieser Ansatz die beste Lösung, da er Datentypen wie int und enum in Bezug auf Speicherplatz, Rechenleistung, Lesbarkeit, Wartbarkeit und Skalierbarkeit weit überlegen ist.

Das könnte Sie auch interessieren:
  • So wählen Sie zwischen MySQL CHAR und VARCHAR
  • Einige Dinge, die Sie über den Varchar-Typ in MySQL wissen sollten
  • Unterschiede zwischen MySQL CHAR und VARCHAR beim Speichern und Lesen
  • Der Unterschied zwischen char und varchar in MySQL
  • Der Unterschied zwischen den Feldtypen char, varchar und Text in MySQL
  • Beispieloperation für die Summe des Mysql-Varchar-Typs
  • So ändern Sie die Länge von varchar in MySQL dynamisch
  • So legen Sie die Länge von varchar in MySQL fest
  • So konvertieren Sie den Typ varchar in der MySQL-Datenbank in den Typ int
  • Wie verarbeitet MySQL Sonderzeichen in den Typen varchar und nvarchar?
  • Als der Interviewer nach dem Unterschied zwischen char und varchar in mysql fragte

<<:  So verwenden Sie & und nohup im Hintergrund von Linux

>>:  Das WeChat-Applet implementiert das Schlangenspiel

Artikel empfehlen

Zwei Bilder von JavaScript zum Verständnis der Prototypenkette

Inhaltsverzeichnis 1. Prototyp-Beziehung 2. Proto...

MySQL5.6.31 winx64.zip Installations- und Konfigurationstutorial

#1. Herunterladen # #2. Entpacken Sie die Datei l...

CSS+HTML zur Realisierung der Funktion der oberen Navigationsleiste

Implementierungseffektdiagramm für die Navigation...

Die HTML-Tag-ID kann eine Variable sein

<table id=" <%=var1%>">, der...

Verstehen Sie das CSS3-Rasterlayout in 10 Minuten

Grundlegende Einführung Im vorherigen Artikel hab...

So überprüfen Sie, ob MySQL erfolgreich installiert wurde

Nachdem MySQL installiert wurde, können Sie in ei...

Mysql-Timeline-Daten, um die ersten drei Daten desselben Tages zu erhalten

Erstellen von Tabellendaten CREATE TABLE `praise_...

Funktionsweise von SQL-SELECT-Datenbankabfragen

Obwohl wir keine professionellen DBAs sind, könne...

Axios Sekundärkapselungsbeispiel Demo im Projekt

1. Warum verpacken? Erleichtert das Aufrufen von ...

Vue3 + TypeScript-Entwicklungszusammenfassung

Inhaltsverzeichnis Vue3 + TypeScript lernen 1. Um...

Zusammenfassung verschiedener Methoden für Vue zum Erreichen dynamischer Stile

Inhaltsverzeichnis 1. Ternäres Operatorurteil 2. ...

Detaillierte Erklärung zur Verwendung von MySQL Online DDL

Inhaltsverzeichnis Text LOCK-Parameter ALGORITHMU...