Le problème avec la recherche de type '%keyword%' est qu'il n'y a aucun moyen de rechercher efficacement dans une table normale, même si vous créez un index sur cette colonne. Pensez à la façon dont vous regarderiez cette chaîne dans l'annuaire téléphonique. Il n'y a en fait aucun moyen de l'optimiser - vous devez analyser l'intégralité de l'annuaire téléphonique - et c'est ce que fait MySQL, une analyse complète de la table.
Si vous changez cette recherche en "mot clé%" et utilisez un index, vous pouvez obtenir une recherche très rapide. Il semble que ce n'est pas ce que vous voulez, cependant.
Donc, dans cet esprit, j'ai pas mal utilisé l'indexation/recherche de texte intégral, et voici quelques avantages et inconvénients :
Avantages
- Très rapide
- Renvoie les résultats triés par pertinence (par défaut, bien que vous puissiez utiliser n'importe quel tri)
- Des mots vides peuvent être utilisés.
Inconvénients
- Fonctionne uniquement avec les tables MyISAM
- Les mots trop courts sont ignorés (le minimum par défaut est de 4 lettres)
- Nécessite un SQL différent dans la clause where, vous devrez donc modifier les requêtes existantes.
- Ne correspond pas à des chaînes partielles (par exemple, 'mot' ne correspond pas à 'mot clé', uniquement 'mot')
Voici une bonne documentation sur la recherche en texte intégral .
Une autre option consiste à utiliser un système de recherche tel que Sphinx . Il peut être extrêmement rapide et flexible. Il est optimisé pour la recherche et s'intègre bien à MySQL.