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

So erstellen Sie Komponenten in React

Inhaltsverzeichnis Vorwort Komponenteneinführung ...

Eine kurze Analyse von Patroni in Docker-Containern

Inhaltsverzeichnis Erstellen eines Images Dateist...

Ungewöhnliche, aber nützliche Tags in Xhtml

Xhtml hat viele Tags, die nicht häufig verwendet w...

So zeichnen Sie in CocosCreator ein cooles Radardiagramm

Inhaltsverzeichnis Vorwort Vorschau Text Grafikko...

Erstellen Sie einen hochverfügbaren MySQL-Cluster mit Dual-VIP

Inhaltsverzeichnis 1. Projektbeschreibung: 2. Pro...

Implementierung der Knotenverbindung zur MySQL-Abfragetransaktionsverarbeitung

Inhaltsverzeichnis Geben Sie das Thema MySQL ein:...

js zur Realisierung einer einfachen Scheibenuhr

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

MYSQL Eine Frage zur Verwendung von Zeichenfunktionen zum Filtern von Daten

Problembeschreibung: Struktur: test hat zwei Feld...

So wählen und verwenden Sie PNG, JPG und GIF als Web-Bildformate

Welches dieser Formate (GIF, PNG oder JPG) sollte...

So installieren Sie den RabbitMQ-Server mit Yum auf CentOS

Socat muss vor der Installation von rabbitmq inst...