MySQL regexp намного медленнее, чем

SELECT data FROM test WHERE col REGEXP "asdf_[0-9]+" LIMIT 1 

… 1 строка в наборе (1 мин 43.12 сек)

 SELECT data FROM test WHERE col LIKE "asdf_%" LIMIT 1 

… 1 ряд в наборе (0,01 сек)

regexp может дать мне точный результат, я должен фильтровать данные, если я использую like sql. Есть ли способ улучшить?

BTW: тест имеет 2 миллиона строк и растет.

Попробуйте изменить строку regexp на "^asdf_[0-9]+" .

LIKE привязан (т.е. LIKE 'asdf_%' говорит «строка, начинающаяся с asdf_»), тогда как REGEXP не является ( REGEXP 'asdf_[0-9]+' ищет это в любом месте строки).

Обратите внимание, что выполнение REGEXP 'asdf_[0-9]+' похоже на высказывание LIKE '%asdf_%' .

Я думаю, что REGEXP будет по-прежнему немного медленнее, чем LIKE , но, надеюсь, начало линейного якоря значительно ускорит его.