我有一个搜索框,允许用户输入部分字符串并显示整个名称的自动完成情况。
基本上我想做WHERE LIKE %partial%
。但由于LIKE
查询在有前导通配符时无法使用索引,我最终使用全文索引
我的全文查询看起来像CONTAINS(ColumnName, 'partial*')
这很有效,直到我不得不引入排序。返回的结果需要根据字符串长度进行排序。
CONTAINS(ColumnName, 'partial*') ORDER BY LEN(ColumnName)
由于LEN必须动态计算,然后进行排序,因此性能很糟糕。我尝试创建一个计算列并将其编入索引,但它没有多大帮助。
该表包含大约10万行(这不是一个巨大的行),我想知道如何调整索引以加快速度。
答案 0 :(得分:0)
即使你说你有一个计算列,你应该确保它是持久的。如果未保留计算列,则必须对每一行进行计算。这实际上使您的查询nonSARGable。当列保持不变时,将存储该值并且可以正确使用索引。