Mehrere Methoden zur Lösung des Problems des MySQL-Fuzzy-Abfrageindexfehlers

Mehrere Methoden zur Lösung des Problems des MySQL-Fuzzy-Abfrageindexfehlers

Wenn wir das Platzhalterzeichen „like %“ verwenden, kommt es häufig zu Indexfehlern.
Hier diskutieren wir mehrere Fälle, in denen „like“ % verwendet:

Die folgenden Beispiele verwenden den Index (VC_STUDENT_NAME)

1. Wie „xx %“

ERKLÄREN Sie, wählen Sie * von t_student, wobei VC_STUDENT_NAME wie '王%' ist 

Bildbeschreibung hier einfügen

Wir haben festgestellt, dass der Index gültig ist, wenn das % nicht am Anfang steht

2. Wie '%xx'

ERKLÄREN Sie, wählen Sie * von t_student, wobei VC_STUDENT_NAME wie '%王' ist 

Bildbeschreibung hier einfügen

Wir haben festgestellt, dass der Index ungültig wird, wenn % am Anfang steht.

Die beiden obigen Beispiele zeigen, dass bei der Verwendung von Platzhaltern die Platzierung von % am Anfang zum Fehlschlagen der Indizierung führt.
Bei realen Problemen ist es jedoch häufig erforderlich, für ein Fuzzy-Matching ein % an den Anfang zu setzen. Wir können das Problem des Indexfehlers lösen, indem wir den Index abdecken, das heißt, indem wir die Abfrage in einem Index abdecken.

ERKLÄREN Sie, wählen Sie * von t_student, wobei VC_STUDENT_NAME wie '%王' ist


Bildbeschreibung hier einfügen

Durch Ersetzen der Abfragespalte durch die Spalte, die dem Index entspricht, kann das Problem der Indexungültigkeit gelöst werden.

Auffüllen:

1. Indizes speichern keine Nullwerte

Genauer gesagt speichern einspaltige Indizes keine Nullwerte und zusammengesetzte Indizes speichern keine Werte, die alle Null sind. Der Index kann keine Nullwerte speichern. Wenn also für diese Spalte die Bedingung „ist null“ verwendet wird, ist der Index ungültig.

Ohne Nullwerte kann der Index nicht verwendet werden und die gesamte Tabelle kann nur gescannt werden.

Warum kann die Indexspalte keine Nullwerte speichern?

Der Aufbau eines Baums aus Indexspaltenwerten erfordert zwangsläufig viele Vergleichsoperationen. Die Besonderheit des Nullwertes besteht darin, dass die meisten beteiligten Operationen den Wert Null annehmen.

In diesem Fall kann der Nullwert nicht am Indizierungsprozess teilnehmen. Das heißt, Nullwerte erscheinen nicht wie andere Werte in den Blattknoten des Indexbaums.

2. Nicht geeignet für Spalten mit weniger Schlüsselwerten (Spalten mit mehr doppelten Daten)

Wenn die Indexspalte TYPE 5 Schlüsselwerte hat und 10.000 Datensätze vorhanden sind, dann greift WHERE TYPE = 1 auf 2.000 Datenblöcke in der Tabelle zu.

Zusätzlich zum Zugriff auf die Indexblöcke müssen insgesamt über 200 Datenblöcke zugegriffen werden.

Wenn die gesamte Tabelle gescannt wird und davon ausgegangen wird, dass sich 10 Datenelemente in einem Datenblock befinden, müssen nur 1000 Datenblöcke abgerufen werden.

Sind es weniger, wird der Index auf keinen Fall verwendet.

3. 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.

4. Mehrere Situationen, in denen ein Indexfehler auftritt

1. Wenn in der Bedingung ein „oder“ vorkommt, wird es nicht verwendet, auch wenn in der Bedingung ein Index vorkommt (deshalb wird „oder“ so wenig wie möglich verwendet)

Wenn Sie „oder“ verwenden und den Index wirksam machen möchten, können Sie in der „oder“-Bedingung nur jeder Spalte einen Index hinzufügen.

2. Bei einem mehrspaltigen Index wird der Index nur verwendet, wenn er der erste zu verwendende Teil ist

3.Like-Abfrage beginnt mit %

4. Wenn der Spaltentyp ein String ist, müssen die Daten in der Bedingung in Anführungszeichen gesetzt werden, sonst wird der Index nicht verwendet.

5. Wenn MySQL schätzt, dass ein vollständiger Tabellenscan schneller ist als ein Index, verwendet es den Index nicht.

5.MySQL bietet hauptsächlich zwei Arten von Indizes: B-Tree-Index und Hash-Index

B-Baum-Indizes können Bereichs- und Präfixsuchen durchführen. Bei einem B-Baum mit N Knoten beträgt die Komplexität zum Abrufen eines Datensatzes O(LogN). Entspricht der binären Suche.

Hash-Indizes können nur für Gleichheitssuchen verwendet werden, aber unabhängig davon, wie groß die Hash-Tabelle ist, beträgt die Suchkomplexität O(1).

Wenn die Werte sehr unterschiedlich sind und hauptsächlich nach gleichen Werten (=, <, >, in) gesucht wird, ist der Hash-Index mit einer Suchkomplexität von O(1) offensichtlich eine effizientere Wahl.

Wenn die Unterschiede zwischen den Werten relativ gering sind und die Bereichssuche im Mittelpunkt steht, ist B-Tree die bessere Wahl, da es die Bereichssuche unterstützt.

Damit ist dieser Artikel über mehrere Methoden zur Lösung des Problems des MySQL-Fuzzy-Abfrageindexfehlers abgeschlossen. Weitere relevante Inhalte zum MySQL-Fuzzy-Abfrageindexfehler 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:
  • Detaillierte Erläuterung der MySQL-Datenbankindizes und Fehlerszenarien
  • Häufige Szenarien und Vermeidungsmethoden für Indexfehler in MySQL
  • Prinzip des MySQL-Indexfehlers
  • Gemeinsame MySQL-Indexwirksamkeitsbedingungen und Indexungültigkeitsbedingungen
  • Teilen Sie 15 Szenarien, in denen MySQL-Indizes fehlschlagen

<<:  Schritte eines hervorragenden Registrierungsprozesses

>>:  Beispiel für die Verwendung von UserMap in IMG

Artikel empfehlen

Detaillierte Erklärung der grundlegenden Syntax und Datentypen von JavaScript

Inhaltsverzeichnis JavaScript importieren 1. Inte...

Anwendungsbeispiele für die virtuelle Liste des WeChat-Applets

Inhaltsverzeichnis Vorwort Was ist eine virtuelle...

So lösen Sie das Problem, dass Seata die MySQL 8-Version nicht verwenden kann

Mögliche Gründe: Der Hauptgrund, warum Seata MySQ...

Tutorial zur Installation von MySQL8 auf Centos7

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

Drei Möglichkeiten zum Erstellen eines Graueffekts auf Website-Bildern

Ich habe schon immer Graustufenbilder bevorzugt, d...

Wird der veraltete Docker durch Podman ersetzt?

Das Kubernetes-Team hat vor Kurzem angekündigt, d...

Analyse der Docker-Methode zum Erstellen lokaler Images

Der sogenannte Container erstellt tatsächlich ein...

Detaillierte Erläuterung der MySQL-Indexauswahl und -Optimierung

Inhaltsverzeichnis Indexmodell B+Baum Indexauswah...

Verwenden Sie HTML und CSS, um Ihren eigenen warmen Mann „Dabai“ zu erstellen.

Das Endergebnis sieht so aus, ist es nicht süß … ...

Der Prozess der Installation von SVN auf Ubuntu 16.04.5LTS

Dieser Artikel stellt kurz den Prozess der Einric...

Lösung für MySQL-Verbindungsausnahme und Fehler 10061

MySQL ist ein relationales Datenbankverwaltungssy...