Mysql
 sql >> Database >  >> RDS >> Mysql

Prestazioni REGEXP (confronta con LIKE e =)

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).