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

Quale query SQL è migliore, MATCH AGAINST o LIKE?

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 di LIKE '%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à.