我有一个表格,其中包含nvarchar(450)
类型的基于文本的列,我为该列创建了一个非聚集索引:
CREATE NONCLUSTERED INDEX [myindexname] ON [myschema].[mytable]
(
[mycolumn] ASC
)
执行以下查询时出现问题:
select
....
where
....
mycolumn like '%something%'
如果我尝试在没有第一个%的情况下进行查询,那么索引的工作速度非常快,但使用初始%时,它需要花费大量时间。
我知道索引基础知识建议不要在where clausules中使用initial%,但我无法从查询中删除它。我想知道是否有任何改进索引的选项(我现在无法更改查询)。
注意:解释计划显示对索引的正确访问。
答案 0 :(得分:1)
索引按列mycolumn
按字母顺序排序。因此,当您在前面查找带有%
的子字符串时,查询引擎必须扫描整个表/索引。
使这种查询更快的唯一方法是使用全文搜索。
答案 1 :(得分:0)
全文搜索现在在SQL DB v12中预览。这完全适合您的情况。