Per quanto riguarda l'espressione regolare
L'espressione regolare può mai usa un indice in MySQL.
The =
utilizzerà un indice se:
- viene dichiarato un indice sulla colonna;
- i valori nella colonna hanno una cardinalità sufficiente (se più del +/- 20% delle righe corrisponde, MySQL non utilizzerà un indice, perché in tal caso eseguire una scansione completa della tabella è più veloce );
- Nessun altro indice sulla stessa tabella è più adatto (MySQL può utilizzare solo un indice per tabella per sottoselezione);
Considerando questi e altri avvertimenti più esoterici, un =
il confronto è molto più veloce di un'espressione regolare.
Per quanto riguarda mi piace
LIKE può utilizzare un indice se il carattere jolly non è il primo carattere.
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
Le prestazioni di like
quando si utilizza un indice è molto vicino a =
(supponendo lo stesso numero di righe restituite).