vel*_*koz 5 sql sql-server sql-server-2008
我有一些列EntityName,我希望用户能够通过输入以空格分隔的单词来搜索名称.该空间被隐式地视为"AND"运算符,这意味着返回的行必须具有指定的所有单词,并且不一定按给定顺序排列.
例如,如果我们有这样的行:
当用户输入:me you,或you me(结果必须等效)时,结果包含第2行和第3行.
我知道我可以这样:
WHERE Col1 LIKE '%' + word1 + '%'
AND Col1 LIKE '%' + word2 + '%'
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更优化的解决方案.
这CONTAINS将需要一个全文索引,(由于各种原因)不是一个选项.
也许Sql2008有一些针对这些案例的内置半隐藏解决方案?
我唯一能想到的就是编写一个CLR进行LIKE比较的函数。这应该快很多倍。
更新:现在我想了一下,CLR 没有帮助是有道理的。另外两个想法:
1 - 尝试索引 Col1 并执行以下操作:
WHERE (Col1 LIKE word1 + '%' or Col1 LIKE '%' + word1 + '%')
AND (Col1 LIKE word2 + '%' or Col1 LIKE '%' + word2 + '%')
Run Code Online (Sandbox Code Playgroud)
根据最常见的搜索(以子字符串开头),这可能会有所改进。
2 - 添加您自己的全文索引表,其中每个单词都是表中的一行。然后就可以正确索引了。
| 归档时间: |
|
| 查看次数: |
19946 次 |
| 最近记录: |