Dans les requêtes de base de données, on est confronté au dilemme de sélectionner la requête optimale pour la recherche lignes basées sur des mots-clés spécifiques dans plusieurs colonnes. Cette question compare deux approches :
Cette requête utilise l'indexation en texte intégral pour rechercher des documents contenant les mots-clés "foo" et "bar" dans les colonnes spécifiées "foo_desc" et "bar_desc". Dans MySQL versions 5.6 et ultérieures, MATCH AGAINST est pris en charge pour les tables InnoDB.
Cette requête concatène les valeurs des deux colonnes et utilise LIKE pour effectuer une recherche de sous-chaîne pour "foo" et "bar" dans le résultat string.
MATCH AGAINST présente des performances supérieures sur les tables MyISAM, en exploitant les index de texte intégral pour rechercher efficacement les mots-clés. En revanche, LIKE effectue une analyse complète du tableau, en recherchant les mots-clés dans chaque ligne, ce qui peut prendre du temps pour les grands ensembles de données.
LIKE n'est efficace que s'il est appliqué directement à une colonne (pas un résultat de fonction), si le modèle de recherche correspond au début de la colonne et si la colonne est indexée. Sinon, il s'agit par défaut d'une analyse complète de la table, ce qui devient peu pratique pour les grands ensembles de données.
Une limitation de MATCH AGAINST dans MySQL est qu'il correspond uniquement à des mots entiers. Ainsi, une recherche de « bla » ne correspondra pas à une colonne contenant « blah », mais une recherche de « bla* » la trouvera.
Sur la base de considérations de performances et des limites de LIKE, MATCH AGAINST est le choix préféré pour rechercher de grands ensembles de données pour des mots-clés dans plusieurs colonnes. Il exploite l'efficacité de l'indexation en texte intégral pour fournir des résultats rapides et précis.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!