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

【MySQL】 索引核心知识点:索引下推、索引失效、联合索引、使用规范

大家好,我是程序员二叉。


简介

索引是 MySQL 数据库优化查询性能的核心手段,合理使用索引能大幅提升 SQL 执行效率,反之则会出现索引失效、查询缓慢等问题。

本文一次性讲透:索引下推原理、索引失效定义、全部失效场景、like 模糊查询规则、隐式转换失效原因、select * 弊端、联合索引设计原则、不适合建索引的场景,一套搞定 MySQL 索引面试+实战。欢迎点赞收藏关注。

一、索引下推(ICP)

1. 原理

InnoDB 存储引擎在查询时,优先利用索引内字段过滤WHERE条件,不再直接根据索引主键逐条回表,仅将过滤后符合条件的数据进行回表查询。

2. 作用

  • 大幅减少回表次数,降低磁盘 IO 开销
  • 提升查询效率,在联合索引 + 范围查询场景优化效果最明显

二、索引失效概述

1. 什么是索引失效

原本可以使用索引的 SQL,MySQL 优化器判定索引效率更低,放弃索引转而执行全表扫描,查询性能急剧下降。

2. 常见索引失效场景

  1. 索引列参与数学运算、函数调用
  2. 字段发生隐式类型转换
  3. 使用!=<>NOT INNOT EXISTS
  4. OR左右条件存在无索引字段
  5. 联合索引违背最左前缀原则
  6. 模糊查询LIKE%开头
  7. ORDER BY排序字段不在索引中,或与索引顺序不一致
  8. 字段区分度极低(如性别、状态),优化器主动放弃索引
  9. 使用IS NULL/IS NOT NULL(多数场景失效)
  10. IN后数据量过大,也会触发索引失效

三、模糊查询 LIKE 索引使用规则

  • LIKE 关键词%走索引,前缀匹配符合索引有序特性
  • LIKE %关键词/LIKE %关键词%索引失效,无法利用索引有序结构

四、字段隐式转换导致索引失效的原因

MySQL 遵循低精度向高精度自动转换规则:
当索引字段为字符串类型,查询条件传入数字,数据库会等价转换为:
WHERE CAST(索引列 AS 数值类型) = 条件值

本质索引列被函数包裹,索引结构被破坏,最终导致索引失效。

五、为什么不建议使用 SELECT *

  1. 读取全部字段,加载大量无用数据,增加磁盘 IO 与网络传输开销
  2. 无法使用覆盖索引,必须额外回表查询,丧失索引优化能力
  3. 数据表字段变更时,极易引发程序报错,维护性差
  4. 结果集数据量大,占用更多网络带宽

最佳实践:只查询业务所需字段。

六、联合索引创建顺序原则

核心排序规则(优先级从高到低):

  1. 经常作为查询条件的字段放左侧(满足最左前缀)
  2. 区分度高的字段靠前,过滤数据效果更好
  3. 字段长度小的字段靠前,减小索引体积,提升缓存命中率

总结口诀:高频在前、高区分度在前、短字段在前

七、不适合建立索引的场景

  1. 数据表数据量极小(几百条以内),全表扫描效率高于索引
  2. 字段区分度极低:性别、布尔状态、固定枚举值等
  3. 频繁执行增删改(DML):索引会额外增加数据维护成本
  4. 字段极少出现在WHEREORDER BYGROUP BY
  5. 大文本类型字段:TEXTBLOB、超长VARCHAR,索引体积过大
  6. 业务以批量更新、全表操作为主,索引收益远低于维护开销

八、全文总结

本文汇总了 MySQL 索引面试必考全集:

  1. 索引下推:先在索引层完成数据过滤,减少回表 IO,对范围查询优化效果显著。
  2. 索引失效:核心原因是索引有序性被破坏、索引列被函数 / 运算包裹,或是优化器判定全表扫描更高效。
  3. 模糊查询:仅后缀匹配 like xxx% 可走索引,左模糊、全模糊均会索引失效。
  4. 隐式类型转换:数据库自动转换数据类型,导致索引列被函数包裹,是高频失效场景。
  5. select *:生产环境不推荐使用,会错失覆盖索引优势,额外增加数据传输与 IO 压力。
  6. 联合索引:遵循「高频、高区分、短字段」排序规则,同时严格遵守最左前缀原则。
  7. 索引设计禁忌:小表、低区分度字段、频繁 DML 表、大文本字段,都不建议建立索引。

熟练掌握以上规则,可以解决90% 的 MySQL 慢查询与索引面试问题。

http://www.zskr.cn/news/1424807.html

相关文章:

  • imFile架构深度解析:多协议下载引擎的技术实现与性能优化
  • 2026四川脱硫石灰批发专业厂家推荐:931脱硫石灰厂家联系方式/931脱硫石灰批发推荐/优选推荐 - 优质品牌商家
  • 从界面看MMarkets(评测类)值得关注吗?
  • 光伏并网仿真工程包:含PQ/下垂/VSG多策略模型、实测数据与技术报告
  • 10. IDA分析流程 I 芯巧Cadence 25.1新功能深入学习
  • PyTorch版UNet车道线分割实战包:Tusimple训练+实线/虚线/积水路面多视频验证
  • 如何快速掌握开源质谱数据分析工具MZmine 3的完整工作流程
  • NetcoreKevin:.NET 企业级智能体管理框架
  • C语言B样条曲线生成工具:支持2D/3D点列拟合、二/三次平滑插值与位图可视化
  • 【Claude战略规划文档实战指南】:用1份模板+6套Checklist,3天完成企业级AI路线图重构
  • Agent Teams 多代理协作
  • 业主做门窗定制,到底在定制什么?从安全、舒适到交付的真实需求分析
  • CRNN中文文字识别完整工程包:含360CC数据集、训练模型与PyTorch可运行源码
  • 模型幻觉频发、收敛极慢、资源耗尽——Claude优化问题全链路诊断,今天必须修复的4个致命配置
  • DOM ProcessingInst: 深入解析与高效实践
  • 选装修公司别瞎跑,靠谱张工教你几招辨好坏
  • 微信如何群发文件与PDF?2026合规批量分发完整解决方案
  • Uni-Dock批量对接实战:从SMILES到结果分析,一条龙避坑指南(附完整Python脚本)
  • Claude头脑风暴辅助实战手册(企业级思维加速器):覆盖创意发散、逻辑收敛、方案落地全链路
  • 如何用WeChatMsg打造个人专属的微信聊天记录档案馆
  • Wechatsync CSDN 草稿同步源码分析:为什么当前只能保存草稿,不能自动公开发布
  • 3分钟解锁极域电子教室控制:JiYuTrainer让课堂学习更自由
  • 2026年AI服务统一入口横评,主流平台技术硬实力究竟谁领先?
  • 【字节跳动】云南昆明高原恒温算力中枢 极致精细化逐条全拆解
  • Java后台一键生成Word报告:模板占位符替换、动态表格扩展、多格式图片嵌入
  • NoFences:免费开源的Windows桌面整理终极方案
  • 人与AI的关系——AI是工具,还是伴侣?
  • 如何快速批量下载微博相册高清图片:终极免费工具指南
  • 不止于画线:用Vectrosity插件在Unity里制作平滑的游戏技能轨迹与UI指示线
  • MongoDB备份恢复实战