Mettre à jour
Depuis MySQL 5.6
et plus tard, InnoDB
les tables prennent en charge Match... Against
.
Le premier est beaucoup mieux. Sur MyISAM tables, il utilisera un index de texte intégral sur ces colonnes. L'autre effectuera une analyse complète de la table en effectuant un concat sur chaque ligne, puis une comparaison.
LIKE
n'est efficace que si vous le faites contre :
- une colonne (qui n'est pas le résultat d'une fonction, sauf si votre fournisseur de base de données prend en charge les index fonctionnels (Oracle, par exemple) et que vous les utilisez );
- le début de la colonne (c'est-à-dire
LIKE 'blah%'
par opposition àLIKE '%blah%'
); et - une colonne indexée.
Si l'une de ces conditions n'est pas vraie, le seul moyen pour le moteur SQL d'exécuter la requête consiste à effectuer une analyse complète de la table. Cela peut être utilisable sous environ 10 à 20 000 lignes. Au-delà, il devient cependant rapidement inutilisable.
Remarque : Un problème avec MATCH sur MySQL est qu'il semble ne correspondre qu'à des mots entiers, donc une recherche de 'bla' ne correspondra pas à une colonne avec une valeur de 'blah', mais une recherche de 'bla*' le fera.