多个" LIKE @filter +'%'"的SQL Server索引过滤器

时间:2015-02-28 22:00:34

标签: sql-server

创建LIKE过滤器时(我做的是StartsWith逻辑,而不是Contains)我是否需要对索引执行任何特殊操作,或者只创建标准的非聚簇索引?

查询:

SELECT * FROM Contact WHERE AccountUID = @AccountUID AND (FirstName LIKE @Filter + '%' OR LastName LIKE @Filter + '%' OR Company LIKE @Filter + '%')

拟议指数:

CREATE NONCLUSTERED INDEX [ix_Contact_Search] ON [dbo].[Contact]
(
    [AccountUID] ASC,
    [FirstName] ASC,
    [LastName] ASC,
    [Company] ASC
)

1 个答案:

答案 0 :(得分:1)

不,你的索引没什么特别的。你在那里列出的索引看起来会完美支持你的查询。

这可能超出了你的问题的范围,但这里有一点了解索引和通配符。只要您的搜索谓词(您在where子句中比较的值)是已知值,您就可以使用索引。在你的样本中,你说like @filter + '%'这样就完全可以,因为它评估为(比方说)“你好”+任何东西。索引中的记录看起来(再次,通过示例)“Hello World”,因此它可以寻求权利。

如果您使用通配符(例如'%' + @filter + '%')启动搜索谓词,则可以使用索引。现在你有一个问题,因为你的字符串可能是“AardvarkHello”或“ZebraHello”,它不知道在哪里看。