Concernant l'expression régulière
L'expression rationnelle ne peut jamais utiliser un index dans MySQL.
Le =
utilisera un index si :
- un index est déclaré sur la colonne ;
- les valeurs de la colonne ont une cardinalité suffisante (si plus de +/- 20 % des lignes correspondent, MySQL n'utilisera pas d'index, car dans ce cas, effectuer une analyse complète de la table est plus rapide );
- Aucun autre index sur la même table n'est mieux adapté (MySQL ne peut utiliser qu'un seul index par table par sous-sélection) ;
Compte tenu de ces mises en garde et de quelques autres mises en garde plus ésotériques, un =
la comparaison est beaucoup plus rapide qu'une expression rationnelle.
Concernant comme
LIKE peut utiliser un index si le caractère générique n'est pas le premier caractère.
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
Les performances de like
lors de l'utilisation d'un index est très proche de =
(en supposant que le même nombre de lignes renvoyées).