1

我有一个带有基于文本的列类型的表,nvarchar(450)并为该列创建了一个非聚集索引:

CREATE NONCLUSTERED INDEX [myindexname] ON [myschema].[mytable] 
(
    [mycolumn] ASC
)

执行以下查询时会出现我的问题:

select 
    .... 
where
    .... 
    mycolumn like '%something%'

如果我尝试在没有第一个 % 的情况下进行查询,则索引的工作速度非常快,但是使用初始 % 会花费大量时间。

我知道索引基础建议不要将初始 % 用于 where 子句,但我无法将其从查询中删除。我想知道是否有任何改进索引的选项(我现在无法更改查询)。

注意:解释计划显示了对索引的正确访问。

4

2 回答 2

1

索引按字母顺序按列mycolumn排序。因此,当您查找%前面的子字符串时,查询引擎必须扫描整个表/索引。

使这种查询更快的唯一方法是使用全文搜索。

于 2013-02-07T11:36:23.483 回答
0

全文搜索现在在 SQL DB v12 中处于预览状态。这完全适合您的场景。

于 2015-05-01T17:41:43.180 回答