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

So implementieren Sie eine Paging-Abfrage in MySQL

SQL-Paging-Abfrage:Hintergrund Im System des Unte...

Implementierung von MySQL-indexbasierten Stresstests

1. Datenbankdaten simulieren 1-1 Datenbank- und T...

So verwenden Sie den Linux-Befehl „basename“

01. Befehlsübersicht Basisname - entfernt Verzeic...

CSS Skills Collection – Klassiker unter den Klassikern

Entfernen Sie das gepunktete Kästchen auf dem Link...

JavaScript zum Erreichen eines einfachen Message Board-Falls

Verwenden Sie Javascript, um ein Message Board-Be...

Analyse und Beschreibung von Netzwerkkonfigurationsdateien unter Ubuntu-System

Ich bin heute auf ein seltsames Netzwerkproblem g...

Zwei gängige Lösungen für den HTML-Textüberlauf zeigen Auslassungszeichen an

Methode 1: Verwenden Sie zur Lösung die CSS-Überl...

So installieren Sie den Zookeeper-Dienst auf einem Linux-System

1. Erstellen Sie den Ordner /usr/local/services/z...

Schnelle Lösung zum Vergessen des MySQL8-Passworts

Vorwort Wenn wir das MySQL-Datenbankkennwort verg...