排查索引失效
一、第一步定位 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/8/1 9:13:40 阅读更多 →
从「面向过程」到「面向对象」:FPGA RTL设计中的五大工厂模式实战

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

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

2026/8/1 20:59:20 阅读更多 →
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/7/29 21:34:49 阅读更多 →

最新新闻

Remio:为AI工具打造持续工作记忆,告别重复对话

Remio:为AI工具打造持续工作记忆,告别重复对话

最近在折腾各种 AI 工具时,我遇到了一个非常具体且恼人的问题:每次和 Claude、GPT 或者本地部署的模型对话,聊到项目细节、代码片段或者某个特定偏好时,都得从头解释一遍。昨天刚告诉它我的项目结构,今天再问个新问题&…

2026/8/2 10:09:27 阅读更多 →
I2C LCD驱动全解析:从协议原理到多平台实战与故障排查

I2C LCD驱动全解析:从协议原理到多平台实战与故障排查

1. 项目概述:I2C LCD的入门与精要如果你玩过单片机,尤其是像Arduino、STM32或者树莓派Pico这类开发板,大概率会接触过一种叫“LCD1602”或“LCD2004”的小屏幕。它们能显示两行或四行字符,是调试信息、状态显示的神器。但传统的并…

2026/8/2 10:09:27 阅读更多 →
AI绘画中逗号分隔问题的解决方案

AI绘画中逗号分隔问题的解决方案

1. 问题背景与核心痛点在AI绘画Web UI中使用自然语言描述生成图像时,许多用户发现一个令人困扰的现象:当输入描述中包含逗号时,系统会自动将逗号识别为标签分隔符(tag separator)。这导致原本流畅的自然语言描述被强行…

2026/8/2 10:09:27 阅读更多 →
Wazuh部署实战:Ubuntu 22.04上构建开源SIEM/XDR平台

Wazuh部署实战:Ubuntu 22.04上构建开源SIEM/XDR平台

1. 为什么现在部署Wazuh需要一份“超详细”指南?如果你最近在搜索Wazuh的安装教程,可能会发现一个现象:很多一两年前的“保姆级”教程,照着做大概率会卡在某个环节,不是依赖包版本冲突,就是配置文件格式对不…

2026/8/2 10:09:27 阅读更多 →
企业微信API报错60020排查指南:IP白名单配置与网络架构实战

企业微信API报错60020排查指南:IP白名单配置与网络架构实战

1. 项目概述:当企业微信通讯录同步“罢工”时 在企业应用集成和自动化流程中,企业微信的通讯录同步API扮演着至关重要的角色。无论是将HR系统的新员工信息自动推送到企业微信,还是将企业微信的组织架构拉取到内部CRM进行权限映射,…

2026/8/2 10:09:27 阅读更多 →
网盘直链下载助手:终极免费提速方案,8大网盘下载速度提升10倍!

网盘直链下载助手:终极免费提速方案,8大网盘下载速度提升10倍!

网盘直链下载助手:终极免费提速方案,8大网盘下载速度提升10倍! 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / …

2026/8/2 10:08:27 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →