我对使用什么感到困惑?
基本上,我需要一个搜索字符串,可以在单个列中搜索多个短语的出现,每个输入短语用空格分隔。
所以来自用户的输入会是这样的:
"Phrase1 Phrase2 ... PhraseX" (number of phrases can 0 to unknown!, but say < 6)
我需要用逻辑搜索:
Where 'Phrase1%' **AND** 'Phrase2%' **AND** ... 'PhraseX%'
.. 等等... 所以所有的短语都需要找到。
总是合乎逻辑的 AND
SO 速度,性能考虑在内,我是否使用:
很多
Like 'Phrase1%' and like 'Phrase2%' and like ... 'PhraseX%' ?
或使用
patindex('Phrase1%' , column) > 0 AND patindex('Phrase2%' , column) > 0
AND ... patindex('PhraseX%' , column)
或使用
添加全文搜索索引,
使用:
Where Contatins(Column, 'Phrase1*') AND Contatins(Column, 'Phrase2*') AND ... Contatins(Column, 'PhraseX*')
或
???
几乎太多的选择,这就是为什么我要问,这样做的最有效方法是什么......
你的智慧值得赞赏...
最佳答案
如果您正在搜索 AND,那么正确的通配符搜索将是:
Like '%Phrase1%' and like '%Phrase2%' and like ... '%PhraseX%'
没有理由使用
patindex()
在这里,因为 like
足够并且优化良好。优化得很好,但这种情况无法提高效率。这将需要全表扫描。而且,如果文本字段真的非常大(我的意思是至少有数千或数万个字符),性能将不会很好。解决方案是全文搜索。您可以将其表述为:
where CONTAINS(column, 'Phrase1 AND phrase2 AND . . . ');
这里唯一的问题是您正在寻找的“短语”(似乎是单词)何时是停用词。
总之,如果您有超过几千行或您正在搜索的文本字段有超过几千个字符,那么请使用全文选项。这只是为了指导。如果您正在搜索包含 100 行的引用表并查看最多包含 100 个字符的描述字段,则
like
方法应该没问题。
关于sql-server - SQL Server 在列中搜索文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18040913/