web-dev-qa-db-fra.com

Les performances de «% Query%» par rapport à la recherche en texte intégral CONTIENNENT la requête

J'ai une situation où je voudrais rechercher un seul mot.

Pour ce scénario, quelle requête serait bonne du point de vue des performances?

Select Col1, Col2 from Table Where Col1 Like '%Search%'

ou

Select Col1, Col2 from Table Where Col1 CONTAINS(Col1,'Search')

?

40
dotnetguts

La recherche en texte intégral (en utilisant CONTAINS) sera plus rapide/plus efficace que l'utilisation de LIKE avec des caractères génériques. La recherche de texte intégral (FTS) inclut la possibilité de définir des index de texte intégral, que FTS peut utiliser. Je ne sais pas pourquoi vous ne définiriez pas un index FTS si vous aviez l'intention d'utiliser la fonctionnalité ...

LIKE avec caractères génériques sur le côté gauche (IE: LIKE '%Search') ne peut pas utiliser d'index (en supposant qu'il existe pour la colonne), garantissant un scan de table. Je n'ai pas testé et comparé, mais regex a le même écueil. Clarifier, LIKE '%Search' et LIKE '%Search%' peut pas utiliser un index; LIKE 'Search%' peut utiliser un index.

39
OMG Ponies

Pour une base de données typique, la recherche CONTIENT peut être beaucoup plus rapide en supposant que l'index de recherche en texte intégral approprié est construit sur le champ recherché. L'évaluation de l'opérateur LIKE n'utilise généralement pas d'index et doit donc lire toutes les données.

6
Mark Wilkins