SQL Server recherche de texte dans une colonne
Je suis confus sur ce qu'il faut utiliser?
Essentiellement, j'ai besoin d'avoir une chaîne de recherche qui peut rechercher une seule colonne pour les occurrences de plusieurs phrases, chaque phrase est séparée par un espace.
De sorte que l'entrée de l'utilisateur serait comme:
"Phrase1 Phrase2 ... PhraseX" (number of phrases can 0 to unknown!, but say < 6)
J'ai besoin de recherche avec la logique:
Where 'Phrase1%' **AND** 'Phrase2%' **AND** ... 'PhraseX%'
.. etc... donc toutes les phrases doivent être trouvées.
Toujours logique ET
DONC, la vitesse, les performances prises en compte, Dois-je utiliser:
Beaucoup de
Like 'Phrase1%' and like 'Phrase2%' and like ... 'PhraseX%' ?
ou de l'utilisation
patindex('Phrase1%' , column) > 0 AND patindex('Phrase2%' , column) > 0
AND ... patindex('PhraseX%' , column)
ou de l'utilisation
ajouter un Index de recherche de Texte,
L'utilisation:
Where Contatins(Column, 'Phrase1*') AND Contatins(Column, 'Phrase2*') AND ... Contatins(Column, 'PhraseX*')
Ou
????
Presque trop d'options, qui est pourquoi je pose la question, quel serait le moyen le plus efficace de le faire...
Votre sagesse est apprécié...
- Êtes-vous sûr que ce n'est pas un
OR
? parce que ce ne retourne rien :Like 'Phrase1%' and like 'Phrase2%'
. Btw, ce genre deLIKE
sans%
dans le début, vont bénéficier de l'index - Certainement l'une Et de, il a à mach tous les mots... je suis allé pour la FTS solution, avec la "phrase*" ET ... etc " ... travaille bien.. Merci..
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à la recherche pour ET, puis la bonne recherche de génériques serait:
Il n'y a pas de raison d'utiliser
patindex()
ici, parce quelike
est suffisant et bien optimisé. Bien optimisé, mais ce cas ne peut pas être efficaces. Il faudra un full table scan. Et, si le champ de texte est vraiment, vraiment grand (je veux dire au moins des milliers ou des dizaines de milliers de caractères), la performance ne sera pas bon.La solution est de la recherche plein texte. Vous phrase comme suit:
Le seul problème ici serait le cas de la "phrases" (qui semblent être des mots) que vous cherchez sont des mots vides.
En conclusion, si vous avez plus de quelques milliers de lignes ou le champ de texte vous êtes à la recherche a plus que quelques milliers de caractères, puis utilisez le texte intégral de l'option. C'est juste pour des conseils. Si vous êtes à la recherche par le biais d'un tableau de référence de 100 lignes et à la recherche dans le champ de description de a jusqu'à 100 caractères, puis le
like
méthode doit être fine.Personnellement, j'aime bien cette solution -
Cela devrait idéalement être fait avec l'aide de la recherche Plein texte comme mentionné ci-dessus.
MAIS,
Si vous n'avez pas de texte intégral dans la configuration de votre DB, c'est une interprétation intensive solution pour faire une priorité de la chaîne de recherche. Remarque : il renvoie des lignes pour une partielle/complète combinaison de mots(les lignes contenant un ou plusieurs mots de la chaîne de recherche dans n'importe quel ordre):-