Jonny 5: MySQL LIKE oder REGEXP

Beitrag lesen

sollte man grundsätzlich immer LIKE bei MYSQL vorziehen, oder wann nutze ich REGEXP.

Da gäbe es noch die MySQL Volltextsuche welche ich bei größeren Tabellen und Suchen nach Wörtern wenn möglich vorziehen würde.

Es gibt auch eine boolesche Variante.

 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 - sofern vorhanden - auch verwendet wird. Wie schon erwähnt wurde, explain nutzen. In der Regel kann 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 werden können.

Wenn die Tabelle nur ein paar tausend Datensätze enthält und der Server halbwegs flott, kann man sicherlich auch auf die Verwendung eines Index verzichten. Muss man halt abwägen.