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

So erstellen Sie eine Swap-Partitionsdatei in Linux

Einführung in Swap Swap (d. h. Swap-Partition) in...

Beispielcode für MySQL-Datensicherung und -wiederherstellung

1. Datensicherung 1. Verwenden Sie den Befehl mys...

Perfekte Lösung für den Themenwechsel basierend auf CSS-Variablen (empfohlen)

Als Baidu diese Anforderung erhielt, fand das Unt...

Detaillierte Erklärung zum Festlegen des Kontextpfads in der Webanwendung

URL: http://hostname.com/contextPath/servletPath/...

Besprechen Sie den Wert von Webstandards aus vier Aspekten mit einer Mindmap

Ich habe einige Werte grob aufgelistet, um die Di...

So laden Sie die Kamera in HTML

Wirkungsdiagramm: Gesamtwirkung: Video wird gelad...

Beispiel für einen Persistenzbetrieb mit Gearman + MySQL

Dieser Artikel verwendet die Gearman+MySQL-Method...

Handschriftliche Implementierung von new in JS

Inhaltsverzeichnis 1 Einführung in den neuen Oper...

Webseiten-Erlebnis: Farbabstimmung für Webseiten

<br />Die Farbe einer Webseite ist entscheid...

Detaillierte Diskussion zum Thema mysqldump-Datenexport

1. Bei der Verwendung von mysqldump wird ein Fehl...