按文字长度的全文搜索顺序

时间:2018-04-10 19:01:37

标签: sql-server full-text-search

我有一个搜索框,允许用户输入部分字符串并显示整个名称的自动完成情况。

基本上我想做WHERE LIKE %partial%。但由于LIKE查询在有前导通配符时无法使用索引,我最终使用全文索引

我的全文查询看起来像CONTAINS(ColumnName, 'partial*')

这很有效,直到我不得不引入排序。返回的结果需要根据字符串长度进行排序。

CONTAINS(ColumnName, 'partial*') ORDER BY LEN(ColumnName)

由于LEN必须动态计算,然后进行排序,因此性能很糟糕。我尝试创建一个计算列并将其编入索引,但它没有多大帮助。

该表包含大约10万行(这不是一个巨大的行),我想知道如何调整索引以加快速度。

1 个答案:

答案 0 :(得分:0)

即使你说你有一个计算列,你应该确保它是持久的。如果未保留计算列,则必须对每一行进行计算。这实际上使您的查询nonSARGable。当列保持不变时,将存储该值并且可以正确使用索引。