Относно рег. израз
Редовният израз може никога използвайте индекс в 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 при използване на индекс е много близък до = (ако приемем същия брой върнати редове).