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
数据量越大速度体现越明显。
当然也可以使用全文检索来提高查询速度。
最主要的是需要一开始就有合理的设计思路,避免出现%关键字%这种模糊查询。
Tag标签:「查询 优化 Charindex LIKE」更新时间:「2023-12-18 14:31:10」阅读次数:「2052」