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

Regexp und mysql:Gibt es einen UND-Operator?

Wenn Sie anspruchsvolle Suchfunktionen benötigen, verwenden Sie eine Volltextsuchlösung.

In MySQL der eingebaute Volltext-Suchindex Die Funktion funktioniert nur in der MyISAM-Speicher-Engine. Das ist bedauerlich, da InnoDB die bevorzugte Speicher-Engine für alle MySQL-Tabellen ist. InnoDB in neueren MySQL-Versionen ist in den meisten Fällen schneller als MyISAM und hat bessere Wiederherstellungsfunktionen nach einem Absturz als MyISAM.

Es gab Aussagen des MySQL-Entwicklerteams, dass sie beabsichtigen, einen Volltextindex für InnoDB zu implementieren. Aber wir sind noch viele Monate oder sogar Jahre von der Verfügbarkeit entfernt, und es wird sicherlich ein Upgrade auf eine spätere Version von MySQL erfordern.

Wenn Sie MyISAM-Volltextindizes verwenden müssen, würde ich vorschlagen, Ihre Daten hauptsächlich in InnoDB zu speichern und dann eine Kopie des durchsuchbaren Textes in einer MyISAM-Tabelle zu speichern.

Sie können auch eine externe Lösung wie Sphinx Search verwenden oder Apache Solr Volltextsuchfunktionen außerhalb der Datenbank bereitzustellen. Es gibt sogar eine Möglichkeit, einen Sphinx-Suchindex über die Pluggable-Storage-Engine-Schnittstelle von MySQL zu verwenden .

Ich mag die Verwendung von LIKE nicht mit Wildcards oder REGEXP für die Volltextsuche. Diese Lösungen führen bei jeder Suche vollständige Tabellenscans durch und laufen je nach Datenvolumen hundert- oder tausendmal langsamer als mit einem Index.

Ich habe in meiner Präsentation "Praktische Volltextsuche in MySQL ," und auch in einem Kapitel meines Buches SQL Antipatterns:Avoiding the Pitfalls of Database Programming .

Update:MySQL 5.6 befindet sich derzeit in der Entwicklung (Stand Februar 2012) und implementiert eine Volltext-Indexlösung für InnoDB.