当前位置: 首页 > news >正文

sql中like and not like的优化

select * from ChkRepItemTaskOfSamle 
where Rvt_ApplyID like '%XG%' and Rvt_ApplyID not like '%XGW%'

优化方案 1:使用 PATINDEX 函数(推荐)

sql

复制

下载

SELECT * 
FROM ChkRepItemTaskOfSamle 
WHERE PATINDEX('%XG[^W]%', Rvt_ApplyID) > 0   -- 包含XG且下一个字符不是WOR PATINDEX('%XG', Rvt_ApplyID) > 0;       -- 处理XG在末尾的情况

优化方案 2:使用 CHARINDEX 组合

sql

复制

下载

SELECT * 
FROM ChkRepItemTaskOfSamle 
WHERE CHARINDEX('XG', Rvt_ApplyID) > 0 AND CHARINDEX('XGW', Rvt_ApplyID) = 0;

优化方案 3:添加计算列 + 索引(大数据量适用)

sql

复制

下载

-- 1. 添加持久化计算列
ALTER TABLE ChkRepItemTaskOfSamle
ADD IsTarget AS CAST(CASE WHEN Rvt_ApplyID LIKE '%XG%' AND Rvt_ApplyID NOT LIKE '%XGW%' THEN 1 ELSE 0 END AS BIT
) PERSISTED;-- 2. 创建索引
CREATE INDEX IX_TargetFilter ON ChkRepItemTaskOfSamle(IsTarget);-- 3. 查询时使用
SELECT * 
FROM ChkRepItemTaskOfSamle 
WHERE IsTarget = 1;

性能对比说明:

方法优点缺点适用场景
原始双LIKE简单直观性能较差(两次全列扫描)小数据量
PATINDEX单次扫描,性能较好语法稍复杂中等数据量
CHARINDEX组合函数效率高于LIKE仍需两次扫描通用场景
计算列+索引大数据量极快需要修改表结构,维护成本高百万级以上数据频繁查询

推荐选择:

  • 中等数据量:优先使用 PATINDEX 方案(方案1),它在保持单次扫描的同时更精确

  • 超大数据量:采用计算列+索引方案(方案3),但需权衡维护成本

  • 兼容性要求高:使用 CHARINDEX 组合(方案2)

注意:如果 Rvt_ApplyID 字段已建立索引,建议测试实际执行计划选择最优方案。在 SQL Server 2016+ 版本中,还可考虑使用 STRING_SPLIT 等函数进一步优化。

http://www.xdnf.cn/news/1049329.html

相关文章:

  • ‘str‘ object does not support item assignment
  • B3865 [GESP202309 二级] 小杨的 X 字矩阵
  • ArcGIS中英文切换
  • Python中async协程快速理解
  • AI 应用开发的‘核心枢纽’:Dify、Coze、n8n、FastGPT、MaxKB、RAGFlow 等六大平台全面对决
  • 3.TCP回响服务器实现及源码分析上
  • 5G NR PDCCH之CORESET交织映射
  • 【系统分析师】第4章-基础知识:计算机网络与分布式系统(核心总结)
  • MIT线性代数第二讲笔记
  • 如何在现有的分科、分纲、分目、分类的知识体系下构建根茎式心智
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio搭建PandaWiki知识库问答系统
  • LLMs之Memory:《LLMs Do Not Have Human-Like Working Memory》翻译与解读
  • Kafka 可靠性保障:消息确认与事务机制(二)
  • 山东大学项目实训-创新实训-法律文书专家系统-项目报告(八)
  • Python 函数实战指南:提升编程效率的实用技巧
  • JVM 类加载过程/对象创建过程/双亲委派机制/垃圾回收机制
  • 基于C#部署YoloV5目标检测模型
  • 适配器模式Adapter Pattern
  • 知识体系_研究模型_价格敏感度测试模型(PSM)
  • 【JS-1】JavaScript的三种书写位置详解:内联、内部与外部
  • PyTorch数据分割全流程指南:从MNIST数据集到模型训练
  • Github搜索案例
  • 香橙派Zero3结合Docker部署私有音乐实践过程
  • 【unitrix】 1.9 Z0与其它类型的算术运算(arith_ops.rs)
  • ArcGIS中批量获取输入面图层A中各要素的四至点的实现方法
  • 前端面试专栏-主流框架:8.React Hooks原理与使用规范
  • 在idea上打包DolphinScheduler
  • 三次贝塞尔曲线,二次贝塞尔曲线有什么区别
  • 全国产超小体积RK3576核心板,支持RK3576+FPGA,支持AI与实时控制
  • Python OpenGL文字渲染——SDL(高效+无限缩放)