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