我对ms sql server中的查询有问题。我在一个名为"col1“的列上有一个全文索引。该列中的数据可以得到相当大的(20,30 kb +)。我现在想在本专栏中搜索一个确切的短语。
我被告知“包含”函数是这方面最快的函数,但我知道至少有两种其他方法可以做到这一点:使用“喜欢”函数和使用"charindex“。
问题是,当我搜索一个包含#符号的短语时,“包含”不起作用。例如,“.WHER其中包含(col1,‘查询string#”).“将始终返回0的结果。
我已经切换到使用charindex,这确实返回结果,但是使用这个函数查询数据库需要花费很长的时间。
有没有任何方法可以加快查询的速度,或者获得包含函数来接受我的#符号?
谢谢你抽出时间..。
更新我已经决定在使用charindex的函数之间切换。因此,如果查询数据包含#符号,则切换到使用charindex;对于所有其他查询,我使用other。似乎效果最好。
发布于 2009-05-12 13:31:02
我们在实施FTS的过程中也遇到了类似的问题。这是因为微软从他们的索引例程中删除了许多特殊字符和普通单词。
在我们的情况下,我们可以控制输入,并通过一个函数传递所有文本,该函数可以翻译特殊字符,如哈希符号。因此,哈希符号的数据库输入可能类似于"zxzHASHyxy“。
然后,在执行搜索时,我们可以将翻译的版本替换为“真实的”版本。
然而,这种实现有相当大的负面影响。如果您需要保存未翻译文本的副本,您必须在一个单独的专栏中这样做,这将导致您的数据库大量膨胀。
谨慎地使用这个解决方案。
发布于 2009-05-12 13:35:00
像"#“这样的特殊字符是分词符,不包含在索引中。全文索引'query string#xyz‘看起来像'query’。
您可以尝试使用FREETEXT函数:
使用FREETEXT的全文查询不如使用those的全文查询精确.Server全文搜索引擎识别重要的单词和短语.对于在包含谓词的参数中指定的通常具有意义的保留关键字或通配符,没有赋予任何特殊的含义。
发布于 2009-05-12 13:47:47
您是否使用LIKE操作符/谓词而不是CHARINDEX()函数进行测试?我希望LIKE比CHARINDEX()更快,但我没有任何证据或文档来支持这一点。
此外:
https://stackoverflow.com/questions/852754
复制相似问题