Es ist möglich, dass es schneller sein könnte, da die LIKE-Bedingung schneller als der reguläre Ausdruck ausgewertet werden kann. Wenn also die meisten Zeilen den Test nicht bestehen, könnte es schneller sein. Es wird jedoch langsamer, wenn die meisten Zeilen erfolgreich sind, da für erfolgreiche Zeilen zwei Tests ausgeführt werden müssen und nicht nur einer. Es hängt auch davon ab, welchen Ausdruck der Optimierer zuerst wählt.
SELECT * FROM (
SELECT * FROM lineage_string
WHERE lineage LIKE '179%'
) WHERE lineage regexp '^179(/|$)'
Nun kann ein Index, weil ‚179%‘ sargable ist wie wahrscheinlich Zeilen finden verwendet werden:
Ein noch größeres Speedup können, wenn Sie etwas davon haben erlebt werden. Viele Zeilen müssen überhaupt nicht überprüft werden.
Wie immer ist der beste Weg, um sicher zu sein, es für Ihre tatsächlichen Daten zu messen.
Laut dieser schlecht unterstützten Blogpost war LIKE 10x schneller als REGEXP (Daten können variieren, kein Wort zur Indexnutzung, etc): http://thingsilearn.wordpress.com/2008/02/28/mysql-query -speed-regexp-vs-like/ –
Zusätzlicher Link - gleiche Geschichte, LIKE ist schneller: http://lists.mysql.com/mysql/101728 –
Es war definitiv schneller für 'TEXT' und' VARCHAR' Felder Ich habe es versucht auf. Ich erinnere mich daran, in einem Blog-Kommentar gelesen zu haben, dass ** REGEXP ** schneller ist als ** LIKE ** für "UNSIGNED" -Felder, aber das kann ich nicht bestätigen. – inhan