Prinzipien der MySQL-Datentypoptimierung

Prinzipien der MySQL-Datentypoptimierung

MySQL unterstützt viele Datentypen und die Auswahl des richtigen Datentyps ist für eine hohe Leistung von entscheidender Bedeutung. Hier sind ein paar einfache Grundsätze, die Ihnen dabei helfen, bessere Entscheidungen zu treffen.

  • Kleiner ist meist besser

Sie sollten versuchen, den kleinsten Datentyp zu verwenden, der die Daten korrekt speichern kann. Kleinere Datentypen sind im Allgemeinen schneller, da sie weniger Festplatte, Speicher und CPU-Cache beanspruchen und für die Verarbeitung weniger CPU-Zyklen benötigen. Wenn Sie nicht sicher sind, welcher Datentyp am besten ist, wählen Sie den kleinsten Typ, von dem Sie meinen, dass er den Bereich nicht überschreitet.

  • Mach es einfach

Operationen an einfachen Datentypen erfordern im Allgemeinen weniger CPU-Zyklen. Beispielsweise sind Ganzzahloperationen günstiger als Zeichenoperationen, da Zeichenvergleiche aufgrund von Zeichensätzen und Sortierungen komplizierter sind als Ganzzahlvergleiche. Verwenden Sie beispielsweise die integrierten Typen von MySQL anstelle von Zeichenfolgen zum Speichern von Datums- und Uhrzeitangaben und Ganzzahlen zum Speichern von IP-Adressen.

  • Versuchen Sie, Null zu vermeiden

Abfragen mit nullbaren Spalten sind für MySQL schwieriger zu optimieren, da nullbare Spalten Indizes, Indexstatistiken und Wertevergleiche komplizierter machen. Nullable-Spalten benötigen mehr Speicherplatz und erfordern eine spezielle Behandlung in MySQL. Beim Indexieren einer Spalte mit Nullwerten ist für jeden Indexdatensatz ein zusätzliches Byte erforderlich. In MyISAM kann dies sogar dazu führen, dass aus einem Index mit fester Größe ein Index mit variabler Größe wird.

Im Allgemeinen ist die Leistungsverbesserung durch die Änderung einer Spalte mit Nullwerten in eine Spalte ungleich Null gering. Es besteht daher keine Notwendigkeit, diese Situation in einem vorhandenen Schema zu finden und zu beheben, es sei denn, Sie sind sicher, dass sie Probleme verursachen wird.

Die Ausnahme besteht darin, dass InnoDB ein separates Bit zum Speichern von Nullwerten verwendet, sodass es eine gute Speichereffizienz für spärliche Daten aufweist (viele Werte sind Null und nur wenige Zeilen haben nicht-Null-Werte in der Spalte). Dies gilt jedoch nicht für MyISAM.

Beim Auswählen eines Datentyps für eine Spalte.

Der erste Schritt besteht darin, den geeigneten großen Typ zu bestimmen: Zahl, Zeichenfolge, Zeit usw. Der zweite Schritt besteht darin, den spezifischen Typ auszuwählen. Viele MySQL-Datentypen können denselben Datentyp speichern, aber Speicherlänge und -bereich sind unterschiedlich, die zulässige Genauigkeit ist unterschiedlich oder der erforderliche physische Speicherplatz ist unterschiedlich.

Ganzzahltypen

Diese Typen können zum Speichern von Ganzzahlen verwendet werden

Typ Anzahl der Speicherbits
winzige 8
kleinint 16
Mittelwert vierundzwanzig
int 32
groß 64

Sie können Werte im Bereich von -2^(N-1)^ bis 2^(N-1)^-1 speichern, wobei N die Anzahl der Bits des Speicherplatzes ist.
Ganzzahlige Typen verfügen zudem über die optionale Eigenschaft „signed“, was bedeutet, dass negative Werte nicht zulässig sind, was die Obergrenze positiver Zahlen verdoppeln kann. Beispielsweise liegt der Bereich, der in unsigned tinyint gespeichert werden kann, bei 0 bis 255, es sind zwar negative Werte zulässig, der Speicherbereich liegt jedoch bei -128 bis 127.

MySQL wählt verschiedene Ganzzahltypen aus, um zu bestimmen, wie Daten im Speicher und auf der Festplatte gespeichert werden. Bei Ganzzahlberechnungen werden jedoch im Allgemeinen 64-Bit-Bigint-Ganzzahlen verwendet, selbst in 32-Bit-Umgebungen. (außer Aggregatfunktionen)

MySQL ermöglicht Ihnen auch, Breiten für Integer-Typen anzugeben. Wie int(11), aber es begrenzt nicht den zulässigen Wertebereich, sondern gibt nur die Anzahl der Zeichen an, die von einigen interaktiven MySQL-Tools (wie SQLyog, Navicat) zur Anzeige verwendet werden. Für Speicher- und Berechnungszwecke sind int(1) und int(11) identisch.

Reelle Zahlentypen

Reelle Zahlen sind Zahlen mit einem Bruchteil. In MySQL können Decimal, Float und Double zum Speichern von reellen Zahlentypen verwendet werden.

Die Typen „Float“ und „Double“ unterstützen Näherungsberechnungen mit standardmäßiger Gleitkommaarithmetik.
Der Dezimaltyp wird zum Speichern präziser Dezimalzahlen verwendet. In MySQL 5.0 und höheren Versionen führt der MySQL-Server selbst hochpräzise Dezimalberechnungen durch.

Gleitkommatypen benötigen im Allgemeinen weniger Speicherplatz als Dezimaltypen, um denselben Wertebereich zu speichern. Float verwendet 4 Bytes zur Speicherung und Double verwendet 8 Bytes zur Speicherung, was eine höhere Präzision und einen größeren Bereich als Float bietet. Bei Gleitkommaberechnungen verwendet MySQL „double“ als internen Gleitkommaberechnungstyp.

Wenn Sie genaue Berechnungen mit Dezimalzahlen durchführen möchten, verwenden Sie decimal (z. B. bei Finanzdaten). Bei großen Datenmengen können Sie jedoch auch bigint anstelle von decimal verwenden und die Währungseinheit speichern, indem Sie die Anzahl der Dezimalstellen mit demselben Vielfachen multiplizieren. Dadurch kann der hohe Aufwand für die Dezimalberechnung vermieden werden.

Float und Double verwenden native Gleitkommaberechnungen, die von der CPU unterstützt werden, und sind daher schnell.
Dezimal ist eine hochpräzise Berechnung, die vom MySQL-Server selbst implementiert wird.

Zeichenfolgentyp

VARCHAR und CHAR sind die beiden wichtigsten Zeichenfolgentypen.

varchar

Der Typ varchar wird zum Speichern von Zeichenfolgen variabler Länge verwendet und ist der am häufigsten verwendete Zeichenfolgendatentyp. Es ist platzsparender als Typen mit fester Länge, da es nur den nötigen Platz nutzt.

VARCHAR erfordert ein oder zwei zusätzliche Bytes zum Aufzeichnen der Zeichenfolgenlänge: Wenn die maximale Länge der Spalte kleiner oder gleich 255 Bytes ist, wird nur ein Byte verwendet, andernfalls werden zwei Bytes verwendet.

VARCHAR spart Speicherplatz und trägt somit auch zur Leistung bei. Da die Zeilenlänge jedoch variabel ist, kann eine Aktualisierung dazu führen, dass die Zeile länger als zuvor wird, was zusätzlichen Arbeitsaufwand bedeutet. Denn der von der Zeile belegte Platz wird größer und auf der Seite ist kein Platz mehr vorhanden, um sie zu speichern. In diesem Fall teilt MyISAM die Zeile zur Speicherung in verschiedene Fragmente auf und InnoDB muss die Seite aufteilen, damit die Zeile auf die Seite passt. Bei einigen anderen Speicher-Engines werden die Daten möglicherweise nicht direkt aktualisiert.

Die geeignetsten Szenarien für die Verwendung von varchar sind: wenn die maximale Länge der Zeichenfolgenspalte viel größer als die durchschnittliche Länge ist; wenn die Spalte selten aktualisiert wird (Fragmentierung ist kein Problem); und wenn ein komplexer Zeichensatz wie UTF-8 verwendet wird, bei dem jedes Zeichen mit einer anderen Anzahl von Bytes gespeichert wird.

Der Speicherplatzbedarf zum Speichern von „Hallo“ mit varchar(5) und varchar(200) ist derselbe, aber die Verwendung einer längeren Spalte verbraucht mehr Speicher. MySQL weist normalerweise einen Speicherblock fester Größe zu, um interne Werte zu speichern. Dies ist insbesondere dann problematisch, wenn im Arbeitsspeicher gespeicherte temporäre Tabellen zum Sortieren oder Bearbeiten verwendet werden. Ebenso problematisch ist es, wenn zum Sortieren temporäre Tabellen auf der Festplatte verwendet werden. Die beste Strategie besteht daher darin, nur den Speicherplatz zuzuweisen, den Sie wirklich benötigen.

verkohlen

Der Zeichentyp hat eine feste Länge. MySQL reserviert immer genügend Speicherplatz für die definierte Zeichenfolgenlänge. Beim Speichern von Zeichenwerten entfernt MySQL alle nachstehenden Leerzeichen. Char-Werte werden nach Bedarf mit Leerzeichen aufgefüllt, um den Vergleich zu erleichtern.

char eignet sich zum Speichern sehr kurzer Zeichenfolgen oder wenn alle Werte nahezu gleich lang sind. Beispielsweise der MD5-Wert eines Passwortes. Bei Daten, die sich häufig ändern, ist char auch besser als varchar, da bei char mit fester Länge die Wahrscheinlichkeit einer Fragmentierung geringer ist. Bei sehr kurzen Spalten ist char auch speicherplatzsparender als varchar, da varchar ein zusätzliches Byte für die Datensatzlänge benötigt.

Oben sind die Details der Prinzipien der MySQL-Datentypoptimierung aufgeführt. Weitere Informationen zur MySQL-Datentypoptimierung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • 9 Tipps zur MySQL-Datenbankoptimierung
  • Strategie zur Optimierung der Leistung von MySQL-Datenbankabfragen
  • Prinzip des MySQL-Indexfehlers
  • Details zur zugrundeliegenden Datenstruktur von MySQL-Indizes
  • MySQL-Datenbankindizes und -Transaktionen
  • MySQL-Datenoptimierung - Mehrschichtiger Index

<<:  Vue-Router-Beispielcode zum dynamischen Generieren von Navigationsmenüs basierend auf Backend-Berechtigungen

>>:  Grafisches IDEA-Tutorial zum Konfigurieren des Tomcat-Servers und Veröffentlichen von Webprojekten

Artikel empfehlen

So stellen Sie LNMP und phpMyAdmin in Docker bereit

Umweltvorbereitung: Stellen Sie lnmp auf einem Ho...

Ein verbessertes Screenshot- und Freigabetool für Linux: ScreenCloud

ScreenCloud ist eine tolle kleine App, von der Si...

Zusammenfassung der Tipps zur CSS-Verwendung

Vor Kurzem habe ich mit der Aktualisierung meines ...

Der Unterschied zwischen Hash-Modus und Verlaufsmodus im Vue-Router

vue-router hat zwei Modi Hash-Modus Verlaufsmodus...

Lösung zum Vergessen des MySQL-Datenbankkennworts

Möglicherweise haben Sie gerade ein MySQL-Passwor...

Bringen Sie Ihnen bei, wie Sie den Beobachtermodus in Javascript implementieren

Inhaltsverzeichnis Was ist das Beobachtermuster? ...

Implementierungsbeispiel eines Nginx+Tomcat-Load-Balancing-Clusters

Inhaltsverzeichnis Einführung 1. Fallübersicht 2....

Vue.js implementiert eine Bildwechselfunktion

In diesem Artikel wird der spezifische Code von V...