Ausführliche Erläuterung der Auswirkungen von NULL auf Indizes in MySQL

Ausführliche Erläuterung der Auswirkungen von NULL auf Indizes in MySQL

Vorwort

Ich habe viele Blogs gelesen und von vielen Leuten, darunter auch dem DBA unseres Unternehmens, gehört, dass, wenn in MySql eine Spalte null enthält, der Index, der diese Spalte enthält, ungültig ist.

Ich habe „High Performance MySQL 2nd Edition“ und „MySQL Technology Insider – InnoDB Storage Engine 2nd Edition“ durchgeblättert, konnte aber keine Einführung hierzu finden. Aber nachdem ich es lokal ausprobiert hatte, stellte ich fest, dass die Nullspalte den Index verwenden kann, egal ob es sich um einen Einzelspaltenindex oder einen gemeinsamen Index handelt, aber sie ist auf „ist null“ beschränkt. „Ist nicht null“ verwendet den Index nicht.

Später fand ich in der offiziellen Dokumentation die Beschreibung, dass der Index tatsächlich verwendet werden kann, wenn eine Spalte null enthält. Die Adresse lautet: https://dev.mysql.com/doc/refman/5.7/en/is-null-optimization.html.

Es funktioniert sowohl in MySQL 5.6 als auch in 5.7 und die Speicher-Engine ist InnoDB.

Die Daten lauten wie folgt:

1. Einspaltiger Index

Erstellen Sie einen einzelnen Spaltenindex für die Spalte „Name“:

Fragen Sie die Zeilen ab, in denen der Name null ist:

Fragen Sie die Zeile ab, deren Name „test0“ oder null ist:

Sie können feststellen, dass Indizes verwendet werden können.

2. Gemeinsamer Index

Fügen Sie einen gemeinsamen Index für Alter und Name hinzu:


Fragen Sie die Zeilen ab, in denen das Alter 14 und der Name null ist:

Sie können feststellen, dass der Index auch verwendet wird.

3. Sonstiges

Obwohl MySQL Indizes für Spalten mit Nullen verwenden kann, bedeutet dies nicht, dass Nullen mit anderen Daten im Index identisch sind.

Es wird nicht empfohlen, Nullen in Spalten zuzulassen. Am besten beschränken Sie sich auf „nicht null“ und legen einen Standardwert fest, beispielsweise 0 und „leere Zeichenfolge“. Wenn es sich um einen Datums-/Uhrzeittyp handelt, können Sie ihn auf einen speziellen Wert wie „1970-01-01 00:00:00“ festlegen.

Für MySQL ist Null ein spezieller Wert. Konzeptionell bedeutet NULL „ein fehlender unbekannter Wert“ und wird etwas anders als andere Werte behandelt. Beispiele: Operatoren wie =, <, > können nicht verwendet werden, das Ergebnis von Rechenoperationen mit Null ist Null, Nullzeilen werden bei der Zählung nicht berücksichtigt, Null erfordert mehr Speicherplatz als eine leere Zeichenfolge usw.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • So entwerfen und optimieren Sie MySQL-Indizes
  • Eine kurze Diskussion über MySQL-Index-Designprinzipien und die Unterschiede zwischen gängigen Indizes
  • Teilen Sie einige wichtige Interviewfragen zum MySQL-Index
  • Was sind Ihre Grundsätze für die Gestaltung von Indizes? Wie lassen sich Indexfehler vermeiden?

<<:  Implementierungscode zur Installation von vsftpd in Ubuntu 18.04

>>:  Beispiele und Vergleich von 3 Methoden zur Deduplizierung von JS-Objekt-Arrays

Artikel empfehlen

Sprechen Sie über implizite Konvertierung in MySQL

Im Laufe der Arbeit werden Sie auf viele Fälle im...

Eine elegantere Methode zur Fehlerbehandlung in JavaScript async await

Inhaltsverzeichnis Hintergrund Warum Fehlerbehand...

Beispielcode zum Vergleich verschiedener Syntaxformate von vue3

Die Standardvorlagenmethode ähnelt vue2 und verwe...

Grundlegendes Installationstutorial zum Dekomprimieren von MySQL-Paketen

Da ich auf einen neuen Computer gewechselt bin, m...

Grundlegende Verwendung und Beispiele von yum (empfohlen)

yum-Befehl Yum (vollständiger Name Yellow Dog Upd...

Was sind Web Slices?

Neue Funktion von IE8: Web Slices (Web Slices) Mi...

So extrahieren Sie Zeichenfolgenelemente aus nicht festen Positionen in MySQL

Vorwort Hinweis: Die Testdatenbankversion ist MyS...

Tutorial zur Installation von MySQL8 auf Centos7

Neue Funktionen in MySQL 8: Meine persönliche Mei...

Schreiben Sie eine dynamische Uhr auf einer Webseite in HTML

Verwenden Sie HTML, um eine dynamische Web-Uhr zu...