【问题标题】:Efficient string suffix search in SQL Server?SQL Server 中的高效字符串后缀搜索?
【发布时间】: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


【解决方案1】:

只需使用带有索引的计算字段,或带有反向字段的索引视图。

是的,这将实现反转字段。但是您认为 Oracle 的反向索引是如何工作的?

为了使搜索高效,必须有一个物化的数据结构来搜索。

【讨论】:

  • 将反转的字符串公开为实际的表列与将这种搜索技术隐藏在索引中之间存在明显的区别,因为这种字符串反转在某种程度上与业务模型无关。但似乎没有办法在不显式暴露反向字符串数据的情况下进行有效的后缀搜索,所以我猜你回答了我的问题。 :-)
猜你喜欢
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
相关资源
最近更新 更多