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

Verstehen Sie die Grundlagen von Navicat für MySQL in einem Artikel

Inhaltsverzeichnis 1. Datenbankbetrieb 2. Datenty...

Detaillierte Erklärung des Prinzips und der Verwendung von MySQL-Ansichten

Dieser Artikel veranschaulicht anhand von Beispie...

Vue realisiert Click-Flip-Effekt

Verwenden Sie Vue, um einfach einen Click-Flip-Ef...

Schneller Einstieg in die Teleport-Komponenten und Verwendungssyntax von VUE 3

Inhaltsverzeichnis 1. Einführung in das Teleporti...

Implementierung des Element-UI-Layouts (Zeilen- und Spaltenkomponenten)

Inhaltsverzeichnis Grundlegende Anweisungen und V...

MySQL extrahiert zufällig eine bestimmte Anzahl von Datensätzen

Früher habe ich zur Handhabung dieser Art von Nut...

Grundlegende Schritte zur Verwendung einer Mysql-SSH-Tunnelverbindung

Vorwort Aus Sicherheitsgründen kann sich der Root...

CSS verwendet die BEM-Namenskonvention

Welche Informationen möchten Sie erhalten, wenn S...

Farbverlauf für HTML-Hintergrund durch CSS erreicht

Screenshots der Effekte: Implementierungscode: Cod...

Verstehen Sie die anfängliche Verwendung von Redux in React in einem Artikel

Redux ist ein Plug-In zur Datenstatusverwaltung. ...

So generieren Sie eine Vue-Benutzeroberfläche per Drag & Drop

Inhaltsverzeichnis Vorwort 1. Technisches Prinzip...