排查索引失效
一、第一步定位 SQL 是否走索引必用 EXPLAINEXPLAIN SELECT * FROM t WHERE 条件; EXPLAIN UPDATE t SET xxx WHERE 条件; EXPLAIN DELETE FROM t WHERE 条件;关键字段判断索引失效type列优先级从优到差system const eq_ref ref range index ALL出现ALL全表扫描索引完全失效index扫全部索引树比全表略好但仍算失效场景key列NULL没用到任何索引失效rows列 扫描行数接近表总行数代表索引没生效Extra列关键字Using where; Using index覆盖索引正常Using temporary临时表索引失效Using filesort文件排序索引排序失效Using join buffer (Block Nested Loop)关联无索引二、12 种高频索引失效原因线上最常见1. 隐式类型转换TOP1 线上坑字段类型和查询参数不匹配导致索引失效-- user_id varchar(20) 字符串索引 SELECT * FROM user WHERE user_id 123; -- 数字匹配字符串隐式转换失效 正确改写 -- 正确同类型 SELECT * FROM user WHERE user_id 123;判断EXPLAIN看 typeALL且字段字符集和参数不一致。2. 索引列使用函数 / 运算索引存储原始值运算后无法匹配索引树-- 失效 SELECT * FROM t WHERE DATE(create_time) 2026-07-17; SELECT * FROM t WHERE id 1 100; SELECT * FROM t WHERE SUBSTR(name,1,1)张; 正确改写 -- 改写把函数放常量侧 SELECT * FROM t WHERE create_time BETWEEN 2026-07-17 00:00:00 AND 2026-07-17 23:59:59; SELECT * FROM t WHERE id 99;3. 联合索引不满足最左匹配原则联合索引idx(a,b,c)有效where a? /where a? and b? /where a? and b? and c?失效where b? /where c? /where b? and c?跳过最左前列整个索引无法使用4. 索引列使用 NOT IN IS NOT NULL这类条件会放弃索引走全表扫描-- 失效 SELECT * FROM t WHERE status ! 1; SELECT * FROM t WHERE id NOT IN (1,2,3); SELECT * FROM t WHERE phone IS NOT NULL; -- 优化反向拆分、分页过滤、业务换状态枚举5. LIKE 前缀模糊匹配 % xxx-- 失效无法走索引 SELECT * FROM t WHERE name LIKE %张三; 索引有效写法 -- 有效前缀固定 SELECT * FROM t WHERE name LIKE 张三%;需求必须前后模糊用全文索引MATCH(name) AGAINST(张三)6. OR 左右字段只有一边有索引-- 失效phone无索引整条放弃索引 SELECT * FROM t WHERE id1 OR phone13800000000; 索引有效写法 -- 优化1两边都加索引 -- 优化2UNION ALL 拆分两条带索引查询 SELECT * FROM t WHERE id1 UNION ALL SELECT * FROM t WHERE phone13800000000;7. 字符集不一致关联查询失效表 Autf8mb4表 Butf8关联条件A.phoneB.phone字段字符集不同自动隐式转换索引失效 解决统一所有表、字段字符集utf8mb48. 数据区分度太低选择性差索引字段重复值超多优化器判定走索引不如全表 例status 只有 0/199% 数据都是 1-- 百万级表几乎全是1索引失效 SELECT * FROM order WHERE status 1;解决联合索引、分区、冷热数据分表9. MySQL 优化器判断成本过高主动放弃索引即使有索引数据量大、分页偏移大时优化器选全表-- offset超大索引失效 SELECT * FROM t LIMIT 1000000,10;优化主键分页WHERE id 上次最大id LIMIT 1010. NOT EXISTS / NOT LIKE 否定查询否定类条件大多无法利用索引扫描全表11. 批量 IN 数据量过大IN 里面上千个值优化器放弃索引改用全表扫描 解决分批查询、临时表关联12. 事务隔离级别 间隙锁导致索引看似失效RR 模式下范围更新会加 Next-key 锁表现为锁范围很大不是索引失效是锁机制问题区分开。三、线上快速排查步骤拿慢 SQL / 死锁报错 SQL执行EXPLAIN看 typeALL、keyNULL → 确认索引失效核对是否函数、运算、模糊后缀、OR、!、NOT IN查看字段与参数类型是否一致隐式转换联合索引核对最左前缀是否缺失查询字段区分度SELECT COUNT(DISTINCT col)/COUNT(*) FROM t;比值低于 0.1索引基本无效关联查询核对两张表字段字符集、排序规则大分页检查 offset 是否过大四、线上应急修复规范禁止在索引列写函数条件常量侧运算字符串查询参数必须传字符串数字传数字联合索引业务查询优先带上最左字段模糊查询只用前缀匹配全模糊用全文索引OR 查询拆 UNION ALL保证两边都走索引低区分度字段不单独建单值索引搭配其他字段做联合索引分页避免大 offset使用主键游标分页五、辅助排查 SQL 脚本-- 1. 查看表索引 SHOW INDEX FROM table_name; -- 2. 查看字段字符集、排序规则 DESC table_name; SELECT COLUMN_NAME,CHARACTER_SET_NAME,COLLATION_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA库名 AND TABLE_NAME表名; -- 3. 统计字段区分度 SELECT COUNT(DISTINCT 字段)/COUNT(*) AS selectivity FROM table_name; -- 4. 查看表总行数 SELECT TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA库名 AND TABLE_NAME表名;六、区分两个易混淆问题索引失效EXPLAIN typeALL完全不走索引扫描全表并发下极易行锁变表锁触发死锁索引生效但锁范围大SQL 走索引但使用范围条件RR 隔离产生 Gap 间隙锁互相等待死锁 两者排查方式不同先 EXPLAIN 分清根源。

相关新闻

5个实用Python开源项目解析与应用指南

5个实用Python开源项目解析与应用指南

1. 项目概述上周GitHub上涌现了不少有趣的Python开源项目,作为一名长期关注开源生态的开发者,我从中精选了5个兼具实用性和趣味性的项目。这些项目覆盖了从Web开发到系统优化,从文件传输到AI代理的多个领域,每个项目都解决了特定场…

2026/10/13 23:50:56 阅读更多 →
从「面向过程」到「面向对象」:FPGA RTL设计中的五大工厂模式实战

从「面向过程」到「面向对象」:FPGA RTL设计中的五大工厂模式实战

开篇:软件工程的警示与硬件设计的反思2026年的FPGA设计领域正经历一场沉默的变革。当我们在Xilinx Versal Premium和Intel Agilex 9等顶级器件上开发涵盖数十个独立IP的复杂SoC时,一个以往被忽视的问题正在浮现:我们的RTL代码架构已经无法承载…

2026/10/14 16:59:25 阅读更多 →
Adobe软件授权机制逆向工程与自动化修补技术解析

Adobe软件授权机制逆向工程与自动化修补技术解析

Adobe软件授权机制逆向工程与自动化修补技术解析 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe Creative Cloud系列软件的授权验证机制一直是逆向工程领域的…

2026/10/4 11:02:56 阅读更多 →

最新新闻

VMware虚拟机Ubuntu共享文件夹配置全攻略:hgfs与vmhgfs-fuse详解

VMware虚拟机Ubuntu共享文件夹配置全攻略:hgfs与vmhgfs-fuse详解

VMware 虚拟机里的 Ubuntu 与 Windows 共享文件夹,是很多人用虚拟机的刚需场景。但不少同学按照网上的教程配完后,发现要么虚拟机里看不到共享文件夹,要么能看不能用,要么重启后共享就消失。我前前后后在几台不同配置的机器上配过…

2026/10/15 4:28:50 阅读更多 →
Java密码加密从入门到实战:从明文裸奔到BCrypt/PBKDF2稳妥落库

Java密码加密从入门到实战:从明文裸奔到BCrypt/PBKDF2稳妥落库

最近在帮朋友做Java项目代码审查,发现用户表里的密码字段居然是明文存的。密码加密这事听起来简单,但真落地的时候坑不少:有人直接MD5、有人复制了一段不带盐的SHA-256、还有人把加密和哈希混为一谈,上线没几天就被安全扫描报告点…

2026/10/15 4:28:50 阅读更多 →
Windows下OPENCLAW重制引擎启动与退出故障排查指南

Windows下OPENCLAW重制引擎启动与退出故障排查指南

最近把老电脑翻出来整理硬盘,顺手把折腾了挺久的OPENCLAW又装上了。这引擎本身是个开源重制项目,用来跑那款海盗猫主角的横版动作游戏,画质和操作都比在旧系统里舒服得多,还能存档。但说句实话,每次在Windows上启动和关…

2026/10/15 4:28:50 阅读更多 →
Linux TCP网络编程指南:协议状态、并发模型与调试实战

Linux TCP网络编程指南:协议状态、并发模型与调试实战

我给自己这套Linux学习笔记起了个代号叫“木下”,没啥特别含义,就是当时电脑桌面上放着个木雕摆件。从进程、信号一路看到网络通信,突然发现很多之前学得模模糊糊的概念,到了TCP这里全串起来了。这篇内容是整个“木下系列”里我整…

2026/10/15 4:28:50 阅读更多 →
Kafka生产环境落地指南:集群规划、参数调优与故障排查实战

Kafka生产环境落地指南:集群规划、参数调优与故障排查实战

Kafka这个词在国内后端圈子里基本属于“早晚要碰”的组件。不管你是做电商订单流转、日志采集管道,还是实时数仓的底层数据入口,最后大概率都会落到Kafka上。我自己从最早拿单机版跑Demo,到后来在集群环境里做容量规划、消息治理、故障排查&a…

2026/10/15 4:28:50 阅读更多 →
IDEA 2025.3 新功能实战:多光标、调试数据流与临时文件提升编码效率

IDEA 2025.3 新功能实战:多光标、调试数据流与临时文件提升编码效率

IDEA 2025.3 的更新日志刚出来那会儿,我真没当回事,毕竟每个大版本都爱说“更快、更智能、更好用”。直到上周把开发环境从旧版本升上来,试了一圈新功能,才意识到这波“骚操作”是真的多,甚至有点跟不上了。这篇文章不…

2026/10/15 4:27:50 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →