Eine kurze Einführung in die Abfrageeffizienz von MySQL-Speicherfeldtypen

Eine kurze Einführung in die Abfrageeffizienz von MySQL-Speicherfeldtypen

Die Suchleistung von der schnellsten bis zur langsamsten ist (hier ist, was ich gehört habe):

  • Erstens: tinyint, smallint, mediumint, int, bigint
  • Zweitens: char, varchar
  • Drittens: NULL

Erläuterung (Nachdruck):

Ganzzahltypen

1. TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT, verwenden jeweils 8, 16, 24, 32, 64 Bytes

2. Alle Ganzzahlen verfügen über das optionale Attribut UNSIGNED (beispielsweise liegt der Wertebereich des Felds tinyint nach unsigned bei 0-255, während der Wertebereich von signed zwischen -128 und 127 liegt. Wenn wir also eindeutig keine negativen Werte benötigen, setzen wir signed normalerweise nicht, um negative Zahlen zu unterstützen.)

3. INT(1) und INT(20) sind für Speicherung und Berechnung gleich. N in INT(N) gibt lediglich die Anzahl der von einigen interaktiven Tools anzuzeigenden Zeichen an.

Zeichentyp

char hat eine feste Länge und ist nicht so effizient wie varchar, aber schlechter als varchar bei der Abfrage kurzer Daten

Feste Länge. Wenn beispielsweise UUID als Primärschlüssel verwendet wird, wäre char geeigneter.

NULL-Typ

1. Die Indizierung von NULL-Spalten erfordert zusätzlichen Speicherplatz

2. Beim Vergleichen und Berechnen werden Nullwerte verarbeitet, was zu Indexfehlern führen kann

Versuchen Sie daher, den Typ NULL nicht zu verwenden, sondern eher Integer-Typen

Darüber hinaus ist der Zeit-Datum-Datentyp

1. Verwenden Sie keine Zeichenfolgen zum Speichern von Datumsdaten, da dies Platz verschwendet

2. DATE kann Jahre von 1001 bis 9999 mit einer Genauigkeit von Sekunden speichern. Es fasst Datum und Uhrzeit in einer Ganzzahl im Format JJJJMMTTHHMMSS zusammen und verwendet dabei 8 Bytes.

3. TIMESTAMP speichert die Anzahl der Sekunden seit 1970, was dem Unix-Zeitstempel entspricht. Es kann nur 1970 bis 2038 speichern und verwendet 4 Bytes.

4. Die beiden Funktionen FROM_UNIXTIME() und UNIX_TIMESTAMP() konvertieren Datumsangaben und Unix-Zeitstempel

5. DATE und TIMESTAMP speichern die Zeit, aber wo ist die Zeit? ? ? : Ersteres ist eine Zeitdarstellung, egal wo Sie sich befinden (unabhängig von der Zeitzone), während Letzteres die Greenwich Mean Time ist. . Das heißt, beim Speichern wird DATE entsprechend der angegebenen Zeit gespeichert und TIMESTAMP wird vor dem Speichern zunächst entsprechend der entsprechenden Greenwich Mean Time basierend auf der Zeitzone und dem angegebenen Zeitstempel berechnet. Beim Zugriff wird DATE entsprechend der gespeicherten Zeit zurückgegeben und TIMESTAMP wird entsprechend dem gespeicherten Zeitstempel (als Greenwich Mean Time betrachtet) und der Zeitzone berechnet, um die entsprechende Zeit in der Zeitzone zu berechnen.

6. Normalerweise wird TIMESTAMP verwendet, das eine hohe Platzeffizienz aufweist

7. MySQL bietet keine Datums- und Zeitwerte mit einer Granularität kleiner als Sekunden. Bei Bedarf können Sie BIGINT verwenden, um Zeitstempel auf Mikrosekundenebene zu speichern, oder DOUBLE verwenden, um den Dezimalteil nach Sekunden zu speichern.

Reelle Zahlentypen

1. DECIMAL wird für finanzielle Zwecke verwendet

2. DECIMAL kann Ganzzahlen außerhalb des BIGINT-Bereichs speichern

3. FLOAT und DOUBLE verwenden Standard-Gleitkommaoperationen für Näherungsberechnungen

char und varchar

1. char hat eine feste Länge, varchar hat eine variable Länge, d. h. varchar spart Platz (sofern es nicht mit ROW-FORMAT=FIXED erstellt wurde)

2. Da varchar eine variable Länge hat, wird zusätzliche Arbeit geleistet, wenn die Länge während des UPDATE größer wird

3. Verwenden Sie varchar, wenn: die maximale Länge einer Zeichenfolgenspalte viel größer als die durchschnittliche Länge ist; die Spalte selten aktualisiert wird (Fragmentierung also kein Problem darstellt); ein Zeichensatz wie UTF8 verwendet wird (jedes Zeichen wird mit einer anderen Anzahl von Bytes gespeichert)

4. CHAR ist geeignet für: sehr kurz oder alle Werte sind nahezu gleich lang (z. B. MD5); Spalten ändern sich häufig

5. Problem mit nachstehenden Leerzeichen: Die höhere Version von varchar behält nachstehende Leerzeichen bei; die Versionen char und varchar einer niedrigeren Version entfernen nachstehende Leerzeichen.

6. In CHAR (N) und VARCHAR (N) stellt N die Anzahl der Zeichen dar, nicht die Anzahl der Bytes (chinesische Zeichen belegen 3 Bytes in UTF8).

7. Obwohl der Datentyp VARCHAR(N) die Größe der Zeichenfolge, die er darstellt, auf der Festplatte speichert, weist ihm der Speicher beim Einlesen in den Speicher N*k+1or2 (N<=255,1;sonst 2;) zu (k wird durch den Zeichensatz bestimmt).

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Stapelweises Ersetzen eines Teils der Daten eines Felds in MySQL (empfohlen)
  • mysql ersetzt einen Teil des Feldinhalts und mysql ersetzt die Funktion replace()
  • Zwei Abfragemethoden, wenn der MySQL-Abfragefeldtyp JSON ist
  • MySQL-Gruppierungsmethode für die Gruppierungssequenz einzelner Wörter und die Gruppierung mehrerer Felder
  • Sollten nullbare Felder in MySQL auf NULL oder NOT NULL gesetzt werden?
  • Der Unterschied zwischen den Feldtypen char, varchar und Text in MySQL
  • Analyse, wie eine gespeicherte Prozedur in MySQL erstellt wird, um einer Datentabelle neue Felder hinzuzufügen
  • MySQL SQL-Anweisung zum Suchen doppelter Daten basierend auf einem oder mehreren Feldern

<<:  Detaillierte Erläuterung der Konzepte und Verwendung von Docker Swarm

>>:  Vue implementiert die Methode zur Anzeige des Prozentsatzes der Echart-Kreisdiagrammlegende

Artikel empfehlen

Zusammenfassung der Diskussion zur Gültigkeitsdauer von Nginx-Cookies

Bei jedem Besuch wird im Browser Cookie generiert...

Erklären Sie kurz die Verwendung von „group by“ in SQL-Anweisungen

1. Übersicht Gruppieren nach bedeutet, Daten nach...

Detaillierte Erläuterung der MySQL-Fremdschlüsseleinschränkungen

Amtliche Dokumentation: https://dev.mysql.com/doc...

Ubuntu Docker-Installation in VMware (Containererstellung)

1. Mindmap 2. So bauen Sie einen Container 2.1 Vo...

Detaillierte Erklärung der MySQL-Zeichenfolgenverkettungsfunktion GROUP_CONCAT

Im vorherigen Artikel habe ich ein tabellenübergr...

CSS-Positionierungslayout (Position, Positionierungslayoutfähigkeiten)

1. Was ist Positionierung? Das Positionsattribut ...

Implementierung des Deployment-War-Package-Projekts mit Docker

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

MySQL-Optimierungszusammenfassung – Gesamtzahl der Abfrageeinträge

1. COUNT(*) und COUNT(COL) COUNT(*) führt normale...

So erstellen Sie ein standardisiertes VMware-Image für Kubernetes unter Rancher

Wenn wir Kubernetes lernen, müssen wir in der Kub...

CUDA8.0 und CUDA9.0 koexistieren unter Ubuntu16.04

Vorwort Einige der früheren Codes auf Github erfo...

Detaillierte Installationshistorie von Ubuntu 20.04 LTS

In diesem Artikel wird die Erstellung einer USB-S...