【问题标题】:What is a good way to index for such a query?为此类查询建立索引的好方法是什么?
【发布时间】:2011-07-18 16:41:43
【问题描述】:

Jeff 在https://blog.stackoverflow.com/2011/03/redesigned-users-page/ 中提到

  • 搜索再次“匹配任意位置”,但现在最少匹配 3 个字符。

好东西!由于 LIKE 匹配的性能,以及全文搜索不精确的事实(例如,用户名中的首字母太短而无法在任何全文索引中显示),这被“破坏”了很长一段时间。

一定有办法解决这个问题,我有一个想法,但我想看看是否有人已经有了应对这个挑战的解决方案(替代方案)。

示例查询:

SELECT TOP 36 *
FROM users
WHERE nickname LIKE '%' + @search + '%'

注意:尽管标签是 sql-server,因为最多有 5 个标签,但我非常乐意研究其他 RDBMS 中的解决方案以实现可移植性。

【问题讨论】:

  • 你见过这个吗? sommarskog.se/yourownindex.html本书在“建立自己的索引”一章中涵盖了您的查询。
  • @Mik - 是的,我知道这本书。我应该补充一下如果你已经阅读了,请不要在这里发布内容。买它是为了一个好的理由。我正在寻找自我构思或“开源”的想法。图书信息不是免费的

标签: sql sql-server optimization indexing sql-like


【解决方案1】:

Postgres 至少最近在其标准模块中添加了a trigram-matching solution。它将 LIKE 查询重写为多个三元组匹配查询。不幸的是,索引大小往往很大。

还有Wildspeed,它也受到巨大索引的影响。我猜大小很大程度上取决于列的长度。

【讨论】:

  • +1 非常有用。关于索引大小爆炸的说明是意料之中的。
  • SQL Server 现在可以像 Postgresql 中的三元组一样构建字符串索引。这个答案帮助我找到了正确的参考/搜索词。
猜你喜欢
  • 2016-05-17
  • 2016-02-23
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 2013-08-01
相关资源
最近更新 更多