当前位置: 首页 > 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.jsqmd.com/news/913497/

相关文章:

  • 3分钟完全指南:使用qmc-decoder免费解锁QQ音乐加密文件
  • Hello HarmonyOS:搭建DevEco Studio开发环境与第一个应用运行(1)
  • 为什么92%的Claude企业用错画像标签?深度解析行为埋点偏差、冷启动陷阱与动态衰减曲线
  • Vue3旅游网站源码包:含首页/景点/线路/海报/关于我们/登录注册等9大功能页
  • Claude合同条款审查实操手册:5步精准定位AI服务隐性风险,90%企业已踩坑
  • 2026年卫生避光瓶top10推荐:江苏瓶盖/江苏精油盖/江苏胶头滴管盖/江苏螺口瓶/合规性与性能双维度盘点 - 优质品牌商家
  • 安达发|aps高级排产:电动工具行业智能制造的核心引擎
  • Airy光束自由传播光强仿真:Matlab一键运行生成2D/3D分布图
  • 抖音下载工具深度解析:架构哲学与实战优化指南
  • 深度科普|现代通信技术全解析:从底层原理到5G硬核核心
  • 从移动端看MMarkets(评测类)值得关注吗?
  • imFile架构深度解析:多协议下载引擎的技术实现与性能优化
  • JavaWeb问卷系统实战工程:含完整源码、MySQL建库脚本与可直接运行的JSP页面
  • Claude Code相关最新问题解决API Error: 400 Failed to deserialize the JSON body into the target type:
  • cmd操作手机命令行
  • 【AI时代PRD新范式】:为什么你的Claude需求文档总被研发拒收?3个权威验证指标揭晓
  • 光伏并网仿真工程包:含PQ/下垂/VSG多策略模型、实测数据与技术报告
  • 2026四川脱硫石灰批发专业厂家推荐:931脱硫石灰厂家联系方式/931脱硫石灰批发推荐/优选推荐 - 优质品牌商家
  • 10. IDA分析流程 I 芯巧Cadence 25.1新功能深入学习
  • 2026腾讯广告算法大赛的反思
  • 从界面看MMarkets(评测类)值得关注吗?
  • 终极HS2-HF Patch模组包:200+插件一键安装,彻底解决Honey Select 2兼容性问题
  • 13454353
  • Artec 3D三维扫描技术赋能卢森堡大公青铜肖像创作【巷尚UP3D】
  • 软件测试常见面试题整理
  • 2026年至今杭州植物饮料提取生产线厂商选择与行业深度观察 - 2026年企业资讯
  • 终极HS2游戏增强补丁完整解决方案:从零到精通的安装配置指南
  • Node.js技术周刊 2026年第18周
  • PyTorch版UNet车道线分割实战包:Tusimple训练+实线/虚线/积水路面多视频验证
  • NetcoreKevin:.NET 企业级智能体管理框架