You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL查询执行极慢原因及优化方案咨询

优化带通配符LIKE查询的实战方案

兄弟,这问题我太熟了——带前置通配符的LIKE '%xxx%'简直就是普通B-tree索引的克星!你现在加的索引确实能帮你快速过滤出符合companyid和languagecode的行,但到了noos14 LIKE '%...%'这一步,数据库还是得把这些过滤后的行挨个扫描匹配,百万行里哪怕剩下几十万,也得花不少时间。给你几个针对性的优化方案,亲测有效:

1. 改用全文索引(最推荐,秒级出结果)

SQL Server的全文索引专门为文本包含式搜索设计,效率比LIKE '%xxx%'高几个数量级,尤其适合你这种百万行规模的表。

操作步骤:

  • 先确认数据库开启了全文搜索(默认是开的,没开的话执行这个):
    EXEC sp_fulltext_database 'enable';
    
  • 创建全文目录:
    CREATE FULLTEXT CATALOG ftCatalog_TillBasicData AS DEFAULT;
    
  • 给表创建全文索引(记得替换成你的主键索引名):
    CREATE FULLTEXT INDEX ON dbo.TillBasicData(noos14) 
    KEY INDEX PK_TillBasicData; -- 这里填你的表的主键索引名称
    
  • 最后把查询改成用CONTAINS:
    SELECT * FROM TillBasicData 
    WHERE companyid = 'BE_AA' AND languagecode = 'eng' 
    AND CONTAINS(noos14, '"09258384374953"');
    
    这个查询基本能秒出结果,因为全文索引会对文本做分词和倒排索引,直接定位包含目标字符串的行,不用挨个扫描。

2. 优化现有索引,提升过滤效率

先搞清楚companyid = 'BE_AA' AND languagecode = 'eng'能过滤掉多少行——如果过滤后剩下的行数还是很多(比如几十万),那现有索引的价值就有限了。先跑个查询看看:

SELECT COUNT(*) FROM TillBasicData WHERE companyid = 'BE_AA' AND languagecode = 'eng';

如果结果超过几万行,可以试试这两个优化:

  • 改成覆盖索引:把查询需要的所有列都包含到索引里,这样数据库不用回表查原数据,直接从索引里拿结果,能提速不少:
    CREATE INDEX IX_TillBasicData_Covering ON dbo.tillbasicdata (companyid DESC, languagecode DESC)
    INCLUDE (noos14, [列1], [列2], ...); -- 把SELECT *需要的其他列都列在这里
    
    注意:覆盖索引会增大索引体积,要根据实际情况权衡。
  • 检查统计信息:过时的统计信息会让SQL Server生成糟糕的查询计划,比如没用到你的索引。更新一下试试:
    UPDATE STATISTICS dbo.TillBasicData WITH FULLSCAN;
    

3. 特殊场景:如果是后缀匹配(可选)

如果你实际需求是找noos14以09258384374953结尾的行(而不是任意位置包含),可以用反向索引的技巧:

  • 添加计算列存储反向的noos14:
    ALTER TABLE dbo.TillBasicData ADD noos14_reversed AS REVERSE(noos14);
    
  • 给计算列建索引:
    CREATE INDEX IX_TillBasicData_Reverse ON dbo.tillbasicdata (companyid DESC, languagecode DESC, noos14_reversed DESC);
    
  • 查询时反向搜索字符串:
    SELECT * FROM TillBasicData 
    WHERE companyid = 'BE_AA' AND languagecode = 'eng' 
    AND noos14_reversed LIKE REVERSE('09258384374953') + '%';
    
    这个方法只适合后缀匹配,要是你确实是任意位置包含,还是用全文索引最靠谱。

内容的提问来源于stack exchange,提问作者Matt Douhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:23:22