Zusammenfassung der Situationen, in denen MySQL-Indizes nicht verwendet werden

Zusammenfassung der Situationen, in denen MySQL-Indizes nicht verwendet werden

Indextypen in MySQL

Im Allgemeinen können sie in vier Kategorien unterteilt werden:

  • Normaler Index: der gebräuchlichste Index
  • Eindeutiger Index: Der Wert der Indexspalte muss eindeutig sein, Nullwerte sind jedoch zulässig.
  • Primärschlüsselindex: ein spezieller eindeutiger Index, der keine Nullwerte zulässt
  • Gemeinsamer Index: Die Indexspalte hat mehrere Felder und bei ihrer Verwendung muss das Prinzip des am weitesten links stehenden Präfixes eingehalten werden

Normaler Index

Dies ist der grundlegendste Index und es bestehen für ihn keine Einschränkungen. Es kann auf folgende Arten erstellt werden:

1. Erstellen Sie einen Index

Der Code lautet wie folgt:

CREATE INDEX indexName ON mytable(Benutzername(Länge));

Wenn es sich um den Typ CHAR oder VARCHAR handelt, kann die Länge kleiner als die tatsächliche Länge des Felds sein. Wenn es sich um den Typ BLOB oder TEXT handelt, muss die Länge angegeben werden. Gleiches gilt unten.

2. Ändern Sie die Tabellenstruktur

Der Code lautet wie folgt:

ALTER mytable ADD INDEX [indexName] ON (Benutzername(Länge))

Direkt beim Erstellen einer Tabelle angeben

TABELLE ERSTELLEN meineTabelle(
 ID INT NICHT NULL,
 Benutzername VARCHAR(16) NOT NULL,
 INDEX [Indexname] (Benutzername (Länge))
);

Die Syntax zum Löschen eines Indexes lautet:

DROP INDEX [Indexname] ON meineTabelle;

Eindeutiger Index

Er ähnelt dem vorherigen gewöhnlichen Index, außer dass die Werte der Indexspalte eindeutig sein müssen, aber Nullwerte zulässig sind. Wenn es sich um einen zusammengesetzten Index handelt, muss die Kombination der Spaltenwerte eindeutig sein. Es kann auf folgende Arten erstellt werden:

EINDEUTIGEN INDEX ERSTELLEN indexName ON mytable(Benutzername(Länge))

Ändern Sie die Tabellenstruktur:

ALTER mytable ADD UNIQUE [indexName] ON (Benutzername(Länge))

Geben Sie beim Erstellen einer Tabelle direkt an:

TABELLE ERSTELLEN meineTabelle(  
	ID INT NICHT NULL,  
	Benutzername VARCHAR(16) NOT NULL,  
	UNIQUE [indexName] (Benutzername(Länge))  
);

Primärschlüsselindex

Es handelt sich um einen speziellen eindeutigen Index, der keine Nullwerte zulässt. Im Allgemeinen wird der Primärschlüsselindex beim Erstellen der Tabelle erstellt:

Der Code lautet wie folgt:

TABELLE ERSTELLEN meineTabelle(  
	ID INT NICHT NULL,  
	Benutzername VARCHAR(16) NOT NULL,  
	PRIMÄRSCHLÜSSEL (ID) 
);

Natürlich können Sie auch den ALTER-Befehl verwenden. Denken Sie daran: Eine Tabelle kann nur einen Primärschlüssel haben.

Gemeinsamer Index

Um einspaltige Indizes und zusammengesetzte Indizes visuell zu vergleichen, fügen Sie der Tabelle mehrere Felder hinzu:

TABELLE ERSTELLEN meineTabelle(  
	ID INT NICHT NULL,  
	Benutzername VARCHAR(16) NOT NULL,  
	Stadt VARCHAR(50) NICHT NULL,  
	Alter INT NICHT NULL 
);

Um die Effizienz von MySQL weiter zu steigern, sollten wir die Erstellung eines zusammengesetzten Indexes in Betracht ziehen. Das heißt, Name, Stadt und Alter in einem Index zusammenfassen:

Der Code lautet wie folgt:

ALTER TABLE mytable ADD INDEX name_city_age (Name(10),Stadt,Alter);

Situationen, in denen keine Indizes verwendet werden

Indizes sind möglicherweise nicht immer wirksam. Wenn wir nicht richtig vorgehen, ist es sehr wahrscheinlich, dass anstelle eines Index ein vollständiger Tabellenscan durchgeführt wird. Die Parameter possible_key, key_len und key in Explain können analysieren, ob unsere SQL-Anweisungen Indizes verwenden.

Die folgenden Situationen führen zum Ausfall des Indexes

  1. != wird in der Abfragespalte verwendet, z. B. „select id,name,age from student where id != 2;“
  2. Wenn in der Abfragespalte eine Funktionsoperation verwendet wird, z. B. pow(id,2), um die ID zu quadrieren, wird der Index nicht verwendet.
  3. Wenn die Bedingung ein „oder“ enthält, wird es nicht verwendet, auch wenn einige der Bedingungen Indizes haben (deshalb sollten Sie versuchen, „oder“ so wenig wie möglich zu verwenden).
  4. Auch wenn das Prinzip des am weitesten links stehenden Präfixes im gemeinsamen Index erfüllt ist, wird der Index nicht verwendet, wenn die erste Bedingung eine Bereichsabfrage enthält.
  5. Wenn der Datentyp der Indexspalte implizit konvertiert wird, wird der Index nicht verwendet. Wenn der Spaltentyp beispielsweise ein String ist, müssen die Daten in der Bedingung in Anführungszeichen gesetzt werden, sonst wird der Index nicht verwendet.
  6. Wenn MySQL schätzt, dass ein vollständiger Tabellenscan schneller ist als die Verwendung eines Indexes, wird der Index nicht verwendet.

Mit Explain können Sie testen, ob der Index genutzt wird.

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:
  • Kenntnisse zur Überwachung der MySQL-Indexnutzung (es lohnt sich, sie zu erwerben!)
  • Detaillierte Erläuterung der MySQL-Zeilensperren beim Auftreten zusammengesetzter Primärschlüssel und mehrspaltiger Indizes
  • Wird der Index in der MySQL-Abfragebedingung verwendet?
  • Beispielanalyse der Auswirkungen des MySQL-Index auf die Sortierung
  • So ändern Sie die IP-Einschränkungsbedingungen des MySQL-Kontos
  • Detaillierte Erläuterung der Einschränkungen und Beschränkungen von MySQL-partitionierten Tabellen
  • MySQL-Abfrageanweisung verwendet Limit, um die Anzahl der abgefragten Zeilen zu begrenzen
  • Lösung für das Problem, dass die MySQL-Verbindungsanzahl das Limit überschreitet
  • Analyse des Prinzips der MySQL-Indexlängenbeschränkung

<<:  WeChat-Applet implementiert Puzzlespiel

>>:  So installieren Sie Docker CE auf Ubuntu 18.04 (Community Edition)

Artikel empfehlen

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.5.27 winx64

1. Installationspaket MySQL-Dienst-Downloadadress...

So verwenden Sie Homebrew unter Linux richtig

Viele Leute verwenden Linux Homebrew. Hier sind d...

Lassen Sie uns ausführlich über die gemeinsame MySQL-Abfrage sprechen

Inhaltsverzeichnis Union-Abfrage 1. Fragen Sie di...

Eine kurze Analyse der LRU-verknüpften Liste von MySQL

1. Beschreiben Sie kurz die traditionelle LRU-ver...

So richten Sie eine VSCode-Remoteverbindung zum Server-Docker-Container ein

Inhaltsverzeichnis Ziehen Sie das Bild Ausführen ...

Implementierung eines Random Roll Callers basierend auf JavaScript

In diesem Artikel wird der spezifische JavaScript...

js, um die Rotation von Webseitenbildern zu realisieren

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

40 Schriftarten, empfohlen für berühmte Website-Logos

Wissen Sie, welche Schriftarten in den Logo-Desig...

Detailliertes Tutorial zum Ersetzen von mysql8.0.17 in Windows 10

In diesem Artikel werden die spezifischen Schritt...

Detaillierte Erläuterung des Linux-Befehls zur Änderung des Hostnamens

Linux-Befehl zum Ändern des Hostnamens 1. Wenn Si...

Beispielcode, der gängige Grafikeffekte in CSS-Stilen zeigt

Lassen Sie mich kurz einige gängige Grundgrafiken...