分类: SQLServer
MSSQL查询中使用Charindex替代LIKE进行SQL优化

原始查询SQL:

SELECT * FROM abc.Supplier WHERE SupplierFullName like N'%北京美时洁保洁服务有限公司%' AND ValidStatus = 1

SupplierFullName字段已有非聚集索引,但是条件是like N'%北京美时洁保洁服务有限公司%',会造成索引扫描。
优化思路:
如果查询条件可以为 like N'北京美时洁保洁服务有限公司%'可以走索引,需要系统开始设计时就需设计合理。
如若不能可以使用Charindex代替like:

SELECT * FROM dbo.abc WHERE Charindex('北京美时洁保洁服务有限公司',SupplierFullName)>0 AND ValidStatus = 1

在1千万+的表里面,使用Charindex约能节约1/3的时间,可用下面的SQL测试下实际执行速度

declare @Charindex datetime
set @Charindex = getdate()
SELECT * FROM dbo.abc WHERE Charindex('北京美时洁保洁服务有限公司',SupplierFullName)>0 AND ValidStatus = 1
select [Charindex执行花费时间(毫秒)]=datediff(ms,@Charindex,getdate())

declare @like datetime
set @like = getdate()
SELECT * FROM dbo.abc WHERE SupplierFullName like N'%北京美时洁保洁服务有限公司%' AND ValidStatus = 1
select [Like执行花费时间(毫秒)]=datediff(ms,@like,getdate())

总结下:

'%关键字%'这种的就用charindex,
'关键字%'这种的就用Like
数据量越大速度体现越明显。

当然也可以使用全文检索来提高查询速度。
最主要的是需要一开始就有合理的设计思路,避免出现%关键字%这种模糊查询。


相关博文:

发表新评论