sql-server – SQL Server:’contains’vs’charindex’

我在ms sql server中遇到问题.我在名为“col1”的列上有一个全文索引.此列中的数据可能会非常大(20,30 kb).我现在想在此列中搜索确切的短语.

我被告知“包含”功能是最快的功能,但我知道至少有两种其他方法可以做到这一点;使用“喜欢”功能,并使用“charindex”.

问题是当我搜索包含#符号的短语时,“contains”不起作用.例如,“… WHERE包含(col1,’”查询字符串#“’)…”将始终返回0结果.

我已经切换到使用charindex,这确实返回结果,但使用此函数查询数据库需要更长的时间.

有没有办法加快这个查询速度或让contains函数接受我的#符号?

谢谢你的时间…

更新
我决定在使用charindex包含函数之间切换.因此,如果查询数据包含#符号,我们切换到使用charindex;对于所有其他查询,我使用包含.似乎工作得最好.

最佳答案 我们在自己的FTS实现方面遇到了类似的问题.这是因为微软从索引例程中删除了很多特殊字符和常用字.

在我们的情况下,我们控制输入并通过一个转换特殊字符(如哈希符号)的函数传递所有文本.因此,哈希符号的数据库输入可能看起来像这个“zxzHASHyxy”.

然后,我们可以在执行搜索时将我们翻译的版本替换为“真实”版本.

然而,这个实现有很大的缺点.如果您需要保留未翻译文本的副本,则必须在单独的列中执行此操作,这将导致数据库中出现大量膨胀.

谨慎使用此解决方案.

点赞