De nombreuses applications nécessitent la recherche d'une chaîne dans un corps de texte. MySQL propose un opérateur LIKE pour effectuer de telles recherches, mais comment pouvons-nous optimiser ces requêtes pour des performances optimales ?
Considérez le tableau suivant :
CREATE TABLE `example` (
`id` int(11) unsigned NOT NULL auto_increment,
`keywords` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Lors de l'exécution d'une requête telle que :
SELECT id FROM example WHERE keywords LIKE '%whatever%'
nous pouvons nous attendre à ce que la base de données utilisez un index pour accélérer la recherche. Cependant, si nous ajoutons un index simple sur la colonne des mots-clés en utilisant :
ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);
une requête EXPLAIN révèle que MySQL doit encore analyser la table entière.
MySQL utilise des index en faisant correspondre le début de la chaîne de recherche. Pour les requêtes telles que LIKE 'whatever%', l'index peut être utilisé car 'whatever' est ancré au début de la chaîne.
Cependant, les requêtes comme LIKE '%whatever%' n'ont pas une telle ancre. Le terme de recherche apparaît "flottant" dans la chaîne, obligeant MySQL à analyser l'intégralité du champ.
Pour optimiser ces requêtes, nous pouvons utiliser des index de texte intégral. Ces index sont spécifiquement conçus pour les recherches « flottantes ». InnoDB prend en charge les index de texte intégral depuis la version 5.6.4, ce qui en fait une option viable pour optimiser les requêtes LIKE '%string%'.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3