Aggiorna
A partire da MySQL 5.6
e successivamente, InnoDB
tabelle supporta Match... Against
.
Il primo è molto meglio. Su MyISAM tabelle utilizzerà un indice di testo completo rispetto a quelle colonne. L'altro eseguirà una scansione completa della tabella eseguendo una concat su ogni riga e quindi un confronto.
LIKE
è efficace solo se lo stai facendo contro:
- una colonna (non è il risultato di una funzione a meno che il tuo particolare fornitore di database non supporti gli indici funzionali, ad esempio Oracle, e tu li stia utilizzando);
- l'inizio della colonna (cioè
LIKE 'blah%'
al contrario diLIKE '%blah%'
); e - una colonna indicizzata.
Se una di queste condizioni non è vera, l'unico modo in cui il motore SQL può eseguire la query è eseguire una scansione completa della tabella. Questo può essere utilizzabile con circa 10-20 mila righe. Oltre a ciò, tuttavia, diventa rapidamente inutilizzabile.
Nota: Un problema con MATCH su MySQL è che sembra corrispondere solo a parole intere, quindi una ricerca per 'bla' non corrisponderà a una colonna con un valore di 'blah', ma una ricerca per 'bla*' lo farà.