如何为SQL表添加ComponentCode索引优化模糊查询?排查操作错误
问题分析与解决
1. 脚本中的错误
你最后一行尝试创建CLUSTERED INDEX的操作是错误的——SQL Server规定一个表只能存在一个聚集索引,而你已经通过PRIMARY KEY CLUSTERED为Id字段创建了聚集索引,重复创建会直接报错。
正确的做法是创建非聚集索引,修改后的语句如下:
CREATE NONCLUSTERED INDEX IX_Prices_ComponentCode ON [dbo].[Prices] (ComponentCode); GO
2. 关于查询优化的局限性
需要注意:即使你创建了ComponentCode的非聚集索引,你的查询语句select * from prices where ComponentCode like '%something%'也无法利用该索引加速。
这是因为like '%xxx%'属于前缀通配符匹配,索引是按字段值的前缀顺序排序存储的,前缀模糊匹配无法通过索引快速定位数据。如果业务场景允许,你可以把查询改成like 'something%'(仅后缀通配符),这样就能正常使用索引提升查询效率;如果必须使用前缀模糊匹配,建议考虑为ComponentCode字段创建全文索引来优化这类查询。
内容的提问来源于stack exchange,提问作者Sonnich Jensen
相关产品推荐
相关产品推荐

