Detaillierte Analyse mehrerer Situationen, in denen MySQL-Indizes fehlschlagen

Detaillierte Analyse mehrerer Situationen, in denen MySQL-Indizes fehlschlagen

1. Führende Fuzzy-Abfragen können keinen Index verwenden (wie „%XX“ oder „%XX%“)

Wenn es eine Spalte mit den Codewerten ‚AAA‘, ‚AAB‘, ‚BAA‘, ‚BAB‘ gibt und die Bedingung mit dem Code ‚%AB‘ erfüllt ist,

Es ist unscharf, daher kann die Reihenfolge des Index nicht verwendet werden. Sie müssen nacheinander suchen, um festzustellen, ob die Bedingungen erfüllt sind. Dies führt zu einem vollständigen Index-Scan oder einem vollständigen Tabellen-Scan

Beschreibung. Wenn die Bedingung darin besteht, dass Code wie 'A % ' ist, können Sie nach der Position des Codes suchen, der mit A im Code beginnt, und wenn Sie auf den Code stoßen, der mit B beginnt

Wenn keine Daten vorhanden sind, können Sie die Suche beenden, da die nachfolgenden Daten definitiv nicht den Anforderungen entsprechen. Auf diese Weise können Sie die Vorteile des Index nutzen.

2. Wenn es sich um einen kombinierten Index handelt und Sie nicht in der Reihenfolge der Indizes suchen, z. B. den Index an der dritten Position direkt verwenden und die Indizes an der ersten und zweiten Position ignorieren, wird eine vollständige Tabellenabfrage ausgeführt.

Der Index ist c1,c2,c3,c4

Die Ergebnisse in der obigen Abbildung zeigen, dass die direkte Verwendung von c3 eine vollständige Tabellenabfrage ist und der Index nicht verwendet werden kann. Daher ist die Voraussetzung für die Verwendung des Index für das Feld c3, dass sowohl die Felder c1 als auch c2 Indizes verwenden.

3. Es gibt ein "oder" in der Bedingung

Vermeiden Sie möglichst die Verwendung von oder zum Verbinden von Bedingungen in der Where-Klausel. Andernfalls verzichtet die Engine auf die Verwendung des Index und führt einen vollständigen Tabellenscan durch, beispielsweise:

wähle die ID aus t, wobei num=10 oder num=20

Sie können wie folgt abfragen:

wähle ID aus t, wo num=10, vereine alles, wähle ID aus t, wo num=20

4. Der Index kann keine Nullwerte speichern. Wenn also die Where-Bedingung ein Nullwerturteil für das Feld trifft, verlässt die Datenbank den Index und führt eine vollständige Tabellenabfrage aus, wie z. B.

wähle ID aus t, wobei Num null ist

Sie können für „num“ einen Standardwert von 0 festlegen, um sicherzustellen, dass in der Spalte „num“ der Tabelle kein Nullwert vorhanden ist, und diese dann folgendermaßen abfragen:

wähle ID aus t, wobei num=0

a. Einspaltige Indizes können keine Nullwerte speichern, und zusammengesetzte Indizes können keine Werte speichern, die alle Null sind.

b. Bei Abfragen mit der Bedingung „is null“ kann der Index nicht verwendet werden und es kann nur die gesamte Tabelle gescannt werden.

Warum können Indexspalten keine Nullwerte speichern?

a. Indizes sind geordnet. Wenn ein NULL-Wert in einen Index eintritt, gibt es keine Möglichkeit zu bestimmen, wo er platziert werden soll. (Das Erstellen eines Baums mit Indexspaltenwerten erfordert zwangsläufig viele Vergleichsvorgänge. Nullwerte sind unsichere Werte, die nicht verglichen werden können, und es ist unmöglich zu bestimmen, ob Null an der Blattknotenposition des Indexbaums erscheint.)

5. Versuchen Sie, die Verwendung des Operators != oder <> in der Where-Klausel zu vermeiden, da die Engine sonst die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt.

6. „in“ und „not in“ sollten ebenfalls mit Vorsicht verwendet werden, da es sonst zu einem vollständigen Tabellenscan kommt, wie zum Beispiel:

Wähle ID aus t, wobei Num in (1,2,3) ist

Für kontinuierliche Werte verwenden Sie „between“ statt „in“:

wähle id aus t, wobei num zwischen 1 und 3 liegt

7. Vermeiden Sie nach Möglichkeit die Ausführung von Funktionsoperationen auf Feldern in der Where-Klausel, da dies dazu führt, dass die Engine die Verwendung von Indizes aufgibt und einen vollständigen Tabellenscan durchführt. wie:

–id, deren Name mit abc beginnt

wähle die ID aus t, wobei Teilzeichenfolge (Name, 1, 3) = "abc" ist

8. Versuchen Sie, Ausdrucksoperationen auf Feldern in der Where-Klausel zu vermeiden, da dies dazu führt, dass die Engine die Verwendung von Indizes aufgibt und einen vollständigen Tabellenscan durchführt. wie:

wähle ID aus t, wobei num/2=100

Sollte geändert werden in:

wähle ID aus t, wobei Num=100*2

Zusammenfassen

Damit ist dieser Artikel über verschiedene Situationen, in denen MySQL-Indizes fehlschlagen, abgeschlossen. Weitere Informationen zu MySQL-Indexfehlern finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Analyse mehrerer Situationen, in denen MySQL-Indizes fehlschlagen
  • Häufige Szenarien und Vermeidungsmethoden für Indexfehler in MySQL
  • Detaillierte Analyse der Situationen, in denen Datenbankindizes in MySQL fehlschlagen
  • Wird der Index durch MySQL ungültig?
  • Analyse von fünf Situationen von MySQL-Indexfehlern
  • Mehrere Methoden zur Lösung des Problems des MySQL-Fuzzy-Abfrageindexfehlers
  • Zusammenfassung mehrerer Situationen, in denen MySQL-Indizes fehlschlagen
  • Zusammenfassung einiger gängiger Schreibmethoden, die zu MySQL-Indexfehlern führen
  • Analyse mehrerer Situationen, in denen der MySQL-Index fehlschlägt
  • Detaillierte Erläuterung der MySQL-Datenbankindizes und Fehlerszenarien

<<:  html+css+js zur Realisierung der Funktion der Fotovorschau und des Bildhochladens

>>:  Detaillierte Schritte zur Verwendung von AES.js in Vue

Artikel empfehlen

5 Möglichkeiten zum Löschen oder Entfernen großer Dateiinhalte in Linux

Beim Arbeiten mit Dateien im Linux-Terminal möcht...

Detaillierte Erläuterung des MySql-Beispiels für automatische Kürzung

Detaillierte Erläuterung des MySql-Beispiels für ...

Sammlung von MySQL-Fuzzy-Abfrageanweisungen

SQL-Fuzzy-Abfrageanweisung Die allgemeine Fuzzy-A...

Detaillierte Erklärung der Linux-Befehle sort, uniq, tr tools

Sortierwerkzeug Der Linux-Befehl „sort“ wird zum ...

Lösung für den Konfigurationsfehler des Nginx-SSL-Zertifikats

1. Einleitung Wenn ein Webprojekt auf unserem Lin...

So simulieren Sie eine Aufzählung mit JS

Vorwort Im aktuellen JavaScript gibt es kein Konz...