Относительно регулярного выражения
Регулярное выражение может никогда использовать индекс в MySQL.
=
будет использовать индекс, если:
- для столбца объявлен индекс;
- значения в столбце имеют достаточную мощность (если совпадает более +/- 20% строк, MySQL не будет использовать индекс, поскольку вв этом случае полное сканирование таблицы выполняется на быстрее );
- Никакие другие индексы в той же таблице не подходят лучше (MySQL может использовать только один индекс на таблицу на каждый поднабор);
Учитывая эти и некоторые другие более эзотерические предостережения, =
сравнение на намного быстрее, чем регулярное выражение.
Относительно того, как
LIKE может использовать индекс, если подстановочный знак не является первым символом.
SELECT * FROM t WHERE a LIKE 'abc' <<-- (case insensitive `=`) can use an index
SELECT * FROM t WHERE a LIKE 'abc%' <<-- can use an index
SELECT * FROM t WHERE a LIKE 'a%' <<-- can use an index, depending on cardinality
SELECT * FROM t WHERE a LIKE '%a%' <<-- cannot use an index
SELECT * FROM t WHERE a LIKE '_agf' <<-- cannot use an index
Производительность like
при использовании индекса очень близка к =
(при условии, что возвращается столько же строк).