Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle requête SQL est la meilleure, MATCH CONTRE ou LIKE ?

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.