Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist die Volltextsuche die Antwort?

Das Problem mit der Suche vom Typ '%keyword%' besteht darin, dass es keine Möglichkeit gibt, in einer regulären Tabelle effizient danach zu suchen, selbst wenn Sie einen Index für diese Spalte erstellen. Denken Sie darüber nach, wie Sie diese Zeichenfolge im Telefonbuch nachschlagen würden. Es gibt eigentlich keine Möglichkeit, es zu optimieren – Sie müssen das gesamte Telefonbuch scannen – und das macht MySQL, einen vollständigen Tabellenscan.

Wenn Sie diese Suche auf „Schlüsselwort %“ ändern und einen Index verwenden, können Sie sehr schnell suchen. Es hört sich aber so an, als ob Sie das nicht wollen.

In Anbetracht dessen habe ich ziemlich viel Volltextindizierung/-suche verwendet, und hier sind ein paar Vor- und Nachteile:

Vorteile

  • Sehr schnell
  • Gibt nach Relevanz sortierte Ergebnisse zurück (standardmäßig, obwohl Sie eine beliebige Sortierung verwenden können)
  • Stoppwörter können verwendet werden.

Nachteile

  • Funktioniert nur mit MyISAM-Tabellen
  • Wörter, die zu kurz sind, werden ignoriert (standardmäßig mindestens 4 Buchstaben)
  • Erfordert eine andere SQL in der Where-Klausel, daher müssen Sie vorhandene Abfragen ändern.
  • Entspricht nicht Teilzeichenfolgen (z. B. „Wort“ stimmt nicht mit „Schlüsselwort“ überein, sondern nur „Wort“)

Hier ist eine gute Dokumentation zur Volltextsuche .

Eine weitere Option ist die Verwendung eines Suchsystems wie Sphinx . Es kann extrem schnell und flexibel sein. Es ist für die Suche optimiert und lässt sich gut in MySQL integrieren.