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

Lösung für die lange Verzögerung der MySQL-Datenbank-Master-Slave-Replikation

Vorwort Die Verzögerung der MySQL Master-Slave-Re...

IE6 BUG und Fix ist eine vorbeugende Strategie

Originalartikel: Ultimatives IE6-Cheatsheet: So b...

Nginx kompiliert nginx - neues Modul hinzufügen

1. Vorhandene Module anzeigen /usr/local/nginx/sb...

Beispiel für die Anpassung von rem an mobile Geräte

Vorwort Überprüfung und Zusammenfassung von REM-A...

MySQL Serie 3 Grundlagen

Inhaltsverzeichnis Tutorial-Reihe 1. Einführung i...

Bringen Sie Ihnen bei, wie Sie Hive3.1.2 auf Tencent Cloud erstellen

Umgebungsvorbereitung Stellen Sie vor dem Starten...

MySQL Community Server 5.7.19 Installationshandbuch (detailliert)

Link zum Download der ZIP-Datei auf der offiziell...

Installations-Tutorial für die komprimierte Version von MySQL 5.7.18 Archiv

In diesem Artikel wird die spezifische Methode zu...

Vue3 implementiert CSS unendlichen nahtlosen Scrolleffekt

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung langer Transaktionsbeispiele in MySQL

Vorwort: Die Artikelserie „Erste Schritte mit MyS...