MySQL LIKE oder REGEXP
bearbeitet von
> sollte man grundsätzlich immer LIKE bei MYSQL vorziehen, oder wann nutze ich REGEXP.
Da gäbe es noch die [MySQL Volltextsuche](http://download.nust.na/pub6/mysql/doc/refman/5.1/de/fulltext-search.html) welche ich bei größeren Tabellen und Suchen nach Wörtern wenn möglich vorziehen würde.
Es gibt auch eine [boolesche Variante](http://download.nust.na/pub6/mysql/doc/refman/5.1/de/fulltext-boolean.html).
~~~PHP
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
// AND cond2 ....
~~~
Sogar mit einem Joker, der aber aus Indexierungs- Performancegründen nur an das Wort angestellt werden kann.
Was `LIKE`, `REGEXP` und die Frage ob ein Index auch verwendet wird (sofern vorhanden), wie erwähnt `explain` nutzen. In der Regel kann wenn vorhanden ein Index nur bei hinten angestelltem Joker verwendet werden z.B. `LIKE 'value%bar%'` oder `REGEXP 'value.*bar'` nicht aber etwa bei `%value` oder `[a-z]+value`. Eventuell hat sich da etwas bei neuen MySQL Versionen geändert.
Sobald eine `OR` Verknüpfung mit einem `%foo` (voangestelltem Joker) vorhanden ist, würde es meines Erachtens immer in einem full table scan enden / sprich kein Index verwendet, wenn auch vorhanden.
Wenn die Tabelle nur ein paar tausend Datensätze enthält und der Server halbwegs flot, kann man sicherlich auch auf die Verwendung eines Index verzichten. Muss man halt abwägen.