So lösen Sie das Problem der langsamen Geschwindigkeit von MySQL wie bei Fuzzy-Abfragen

So lösen Sie das Problem der langsamen Geschwindigkeit von MySQL wie bei Fuzzy-Abfragen

Frage: Warum ist die Like-Fuzzy-Abfrage immer noch so langsam, obwohl der Index erstellt wurde?

Zum Beispiel, ob ein Index verwendet werden soll?

1. Der Index des Schlüsselworts „like %keyword“ ist ungültig, daher wird ein vollständiger Tabellenscan verwendet. Sie können jedoch die Flip-Funktion + Fuzzy-Abfrage vorher verwenden, z. B. + Flip-Funktionsindex erstellen = Flip-Funktionsindex anstelle eines vollständigen Tabellenscans verwenden.

2. Als ob der Keyword%-Index gültig wäre.

3. Der Index „like %keyword%“ ist ungültig und der umgekehrte Index kann nicht verwendet werden.

Ein einfacher Test mit MySQL-Explain sieht wie folgt aus:

Erklären Sie „select * from company_info“, wobei CNAME wie „%小%“ aussieht.

Erklären Sie „select * from company_info“, wobei Cname wie „小%“ aussieht.

Oracle-ähnliche „%...%“-Optimierung

1. Versuchen Sie, nicht „%%“ zu verwenden.

2. Für '%' (nicht beginnend mit %) kann Oracle den Index auf die Spalte anwenden

3. Für like '%…' (endet nicht mit %) können Sie reverse + function index verwenden, um es in like '%' zu ändern.

4. Wenn Sie etwas wie „%%“ verwenden müssen, lösen Sie das Problem mit der internen Oracle-Funktion INSTR().

select * from emp2 where job like '%RE%' and ename like '%A%' and mgr like '%3%' ; --Scannen Sie die gesamte Tabelle, was langsam ist select * from emp where instr(job,'RE')>0 and instr(ename,'A')>0 and instr(mgr,'3')>0 ; --Suchen Sie nur nach Feldern, was schnell ist

INSTR in MySQL (nicht dasselbe wie in Oracle)

INSTR(Zeichenfolge,Teilzeichenfolge)

Gibt die Position des ersten Vorkommens von substr in der Zeichenfolge str zurück. Dies ist identisch mit der Zwei-Argument-Form von LOCATE(), außer dass die Reihenfolge der Argumente umgekehrt ist.

INSTR(Feldname, Zeichenfolge)

Diese Funktion gibt die Position einer Zeichenfolge im Inhalt eines Felds zurück. Wenn die Zeichenfolge nicht gefunden wird, gibt sie 0 zurück, andernfalls gibt sie die Position zurück (beginnend bei 1).

SELECT * FROM tblTopic ORDER BY INSTR( topicTitle, 'ha' ) > 0 DESC
SELECT INSTR( ThemaTitel, 'ha' ) FROM tblTopic

Später habe ich versucht, das SQL-Statement zur Abfrage einer Tabelle in mehrere SQL-Statements aufzuteilen, diese gleichzeitig auf dem Server auszuführen und die Ergebnisse anschließend zusammenzuführen. Leider sind meine Kenntnisse zu gering, sodass die Umsetzung nicht so gut ist.

Ich habe auch versucht, einen Volltextindex zu erstellen, aber die Datenbank hat dies nicht zugelassen.

Schließlich ging die Nachfrageseite einen Kompromiss ein und übernahm den Index im Format Like Keyword%

Wenn mir jemand einen Tipp zur Lösung der unscharfen Like-Abfrage geben könnte, wäre ich sehr dankbar!

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Einführung in die Verwendung von MySql wie Fuzzy-Abfrage-Platzhaltern
  • Implementierung einer Fuzzy-Abfrage wie %% in MySQL
  • Eine Zusammenfassung der Fuzzy-Abfrage von MySQL wie
  • So optimieren Sie die langsame Like-Fuzzy-Abfrage in MySQL

<<:  Die Scroll-Ansicht des WeChat-Applets realisiert einen Links-Rechts-Verknüpfungseffekt

>>:  Webinterview: Der Unterschied zwischen MVC und MVVM und warum Vue nicht vollständig mit MVVM kompatibel ist

Artikel empfehlen

Lösen Sie das Problem, dass Docker Elasticsearch7.x startet und einen Fehler meldet

Verwenden des Docker-Befehls „run“ docker run -d ...

Dieser Artikel entführt Sie in die Welt der js-Datentypen und Datenstrukturen

Inhaltsverzeichnis 1. Was ist dynamische Typisier...

Natives JS zum Erzielen von Laufschrifteffekten

Heute werde ich Ihnen einen Laufschrifteffekt zei...

jQuery implementiert die Drop-Down-Box zur Auswahl des Wohnortes

Der spezifische Code für die Verwendung von jQuer...

Eine kurze Diskussion über Yahoos 35 Regeln zur Front-End-Optimierung

Zusammenfassung: Ob bei der Arbeit oder im Vorste...

Verschönerung der Dualsystem-Boot-Schnittstelle für Win10 + Ubuntu20.04 LTS

Effektanzeige Die eingebaute Boot-Oberfläche ist ...

So weisen Sie Feldern bei der MySQL-Abfrage Standardwerte zu

brauchen Wenn Sie ein Feld abfragen, müssen Sie e...

JavaScript implementiert das mobile Puzzlespiel mit neun Rastern

In diesem Artikel wird der spezifische Code für J...

Detailliertes Tutorial zum Herunterladen von MySQL unter Windows 10

MySQL-Versionen werden in Enterprise Edition und ...

HTML-Cellpadding- und Cellspacing-Attribute in Bildern erklärt

Zelle -- der Inhalt der Tabelle Zellenrand (Tabell...

vue + springboot realisiert den Login-Bestätigungscode

In diesem Artikelbeispiel wird der spezifische Co...

So installieren Sie Oracle Java 14 auf Ubuntu Linux

Vor Kurzem hat Oracle die öffentliche Verfügbarke...