IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    MSSQL查询中使用Charindex替代LIKE进行SQL优化

    牧人发表于 2023-12-18 14:29:00
    love 0

    原始查询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
    数据量越大速度体现越明显。

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



沪ICP备19023445号-2号
友情链接