【发布时间】:2013-10-02 10:33:19
【问题描述】:
我想通过使用索引查找而不是扫描来查找与谓词 MyColumn LIKE '%FooBar' 匹配的所有行。
一种方法本质上是创建 MyColumn 的反向版本,并在该列上搜索反向模式 (ooF%),并在反向列上使用常规索引。
但是,我不喜欢手动创建这个反向列。 Oracle 有反向键索引的概念,可以自动在REVERSE(MyColumn) 上建立索引,而无需手动实现列的反向版本(以表上物理列的形式或通过创建索引视图)。
有没有其他方法可以有效地在 SQL Server 中执行后缀子字符串搜索?
【问题讨论】:
-
Full text search 是一个选项吗?
-
@Bridge:全文搜索无法帮助您解决这个问题。来自您自己的链接:“全文查询通过根据特定语言(例如英语或日语)的规则对单词和短语进行操作,对全文索引中的文本数据执行语言搜索”。你不能用那个搜索部分单词。
-
@TToni 您可以搜索单词和短语(
One or more specific words or phrases (simple term)和A word or a phrase where the words begin with specified text (prefix term)),但您似乎是对的 - 不是后缀 - 请参阅 this related question。 -
反向键索引实际上是为了提高性能。在索引顺序键时,它可以防止索引文件中过度活跃的页面拆分/不平衡的 B 树。并不是真的用于优化后缀搜索。
-
@John Wu:你是对的。该 hack 仅适用于单字节字符串,而不适用于例如UTF-8。
标签: sql-server tsql database-indexes