为这样的查询编制索引的好方法是什么?

时间:2011-03-19 09:55:26

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

杰夫在http://blog.stackoverflow.com/2011/03/redesigned-users-page/中提到

  
      
  • 搜索“再次匹配”,但最小匹配现在是3个字符。
  •   

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

必须有一种方法可以解决这个问题,我有一个想法,但我想知道是否有人已经有了解决方案(替代方案)来应对这一挑战。

示例查询:

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

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

1 个答案:

答案 0 :(得分:4)

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

还有Wildspeed,它也有巨大的指数。我猜这个尺寸很大程度上取决于色谱柱的长度。