按文本长度的全文搜索顺序
Full text search order by text length
我有一个搜索框,允许用户输入部分字符串并显示全名的自动完成。
基本上我想做WHERE LIKE %partial%
。但是由于 LIKE
查询在有前导通配符时无法使用索引,所以我最终使用了全文索引
我的全文查询看起来像 CONTAINS(ColumnName, 'partial*')
在我不得不引入排序之前,这一直很好用。返回结果需要按照字符串长度排序。
CONTAINS(ColumnName, 'partial*') ORDER BY LEN(ColumnName)
性能很糟糕,因为必须动态计算 LEN,然后进行排序。我尝试创建一个计算列并为其编制索引,但没有太大帮助。
table 包含大约 100k 行(这不是一个很大的行),我想知道如何调整索引以加快速度。
即使您说您有一个计算列,您也应该确保它是持久的。当计算列未持久化时,它必须对每一行进行计算。这实质上使您的查询不可 SARGable。当列持久化时,值被存储并且索引可以被正确使用。
我有一个搜索框,允许用户输入部分字符串并显示全名的自动完成。
基本上我想做WHERE LIKE %partial%
。但是由于 LIKE
查询在有前导通配符时无法使用索引,所以我最终使用了全文索引
我的全文查询看起来像 CONTAINS(ColumnName, 'partial*')
在我不得不引入排序之前,这一直很好用。返回结果需要按照字符串长度排序。
CONTAINS(ColumnName, 'partial*') ORDER BY LEN(ColumnName)
性能很糟糕,因为必须动态计算 LEN,然后进行排序。我尝试创建一个计算列并为其编制索引,但没有太大帮助。
table 包含大约 100k 行(这不是一个很大的行),我想知道如何调整索引以加快速度。
即使您说您有一个计算列,您也应该确保它是持久的。当计算列未持久化时,它必须对每一行进行计算。这实质上使您的查询不可 SARGable。当列持久化时,值被存储并且索引可以被正确使用。