最左前缀匹配原则

发布时间:2026/9/22 19:51:47

最左前缀匹配原则 [[MySQL]] 最左前缀匹配原则详解1. 什么是最左前缀匹配原则最左前缀匹配原则是 MySQL联合索引组合索引的重要规则。简单来说当使用联合索引查询时MySQL 会从索引的最左列开始匹配不能跳过中间列。例如创建联合索引CREATEINDEXidx_userONuser(name,age,city);索引顺序name → age → cityMySQL 会按照这个顺序组织索引数据。因此可以匹配name name age name age city不能直接匹配age city age city2. 联合索引为什么遵循最左匹配MySQL InnoDB 的索引底层结构是BTree。假设存在联合索引(name,age,city)索引排序规则第一层按照 name 排序name 相同按照 age 排序age 相同按照 city 排序例如张三 18 北京 张三 20 上海 李四 18 广州 李四 25 深圳可以快速找到张三 张三 20岁 张三 20岁 上海但是无法直接找到18岁 北京因为索引首先按照 name 排序。3. 最左匹配示例创建索引CREATEINDEXidx_userONuser(name,age,city);3.1 完全匹配索引SQLSELECT*FROMuserWHEREname张三ANDage20ANDcity北京;匹配顺序name → age → city可以使用完整联合索引。3.2 只匹配第一个字段SQLSELECT*FROMuserWHEREname张三;匹配name符合最左原则。可以使用索引。3.3 匹配前两个字段SQLSELECT*FROMuserWHEREname张三ANDage20;匹配name → age可以使用索引。4. 哪些情况无法充分使用索引4.1 跳过最左字段SQLSELECT*FROMuserWHEREage20;索引(name, age, city)查询age但是缺少nameMySQL 无法快速定位索引范围。通常无法使用该联合索引。4.2 跳过中间字段SQLSELECT*FROMuserWHEREname张三ANDcity北京;索引(name, age, city)匹配name跳过age再查询city结果MySQL 可以使用name这一部分索引。但是city无法继续利用索引定位。原因联合索引必须按照name → age → city顺序匹配。5. 范围查询影响索引匹配这是面试中经常考的问题。索引(name,age,city)SQLSELECT*FROMuserWHEREname张三ANDage18ANDcity北京;执行过程先匹配name然后age 18由于 age 是范围查询 BETWEEN LIKE 前缀查询MySQL 后续无法继续精确匹配city所以name √ age √ city ×记忆范围查询之后索引匹配通常停止。6. LIKE 查询是否使用索引可以使用索引SELECT*FROMuserWHEREnameLIKE张%;原因因为知道开头张可以定位索引范围。无法使用索引SELECT*FROMuserWHEREnameLIKE%张;原因不知道开头字符。MySQL 无法确定搜索范围。通常会导致全表扫描。7. WHERE 条件顺序影响索引吗很多人认为WHEREage20ANDname张三不会走索引。实际上不会。MySQL 优化器会自动调整查询条件。例如索引(name,age)下面两个 SQLWHEREname张三ANDage20和WHEREage20ANDname张三最终都会按照name → age使用索引。真正影响索引的是是否满足最左匹配规则。8. 如何设计联合索引8.1 高频查询字段优先例如经常查询SELECT*FROMorderWHEREuser_id100ANDstatus1;可以建立INDEX(user_id,status)8.2 区分度高的字段优先例如字段gender只有男 女区分度较低。字段user_id通常唯一。区分度更高。8.3 不要创建过多索引索引越多优点查询更快缺点占用空间降低新增数据速度更新数据需要维护索引9. 面试总结Q什么是最左前缀匹配原则回答MySQL 使用联合索引时会按照索引字段从左到右匹配查询条件。如果缺少最左字段后续字段通常无法使用索引。Q联合索引(a,b,c)哪些可以使用可以a a,b a,b,c不能充分使用b c b,cQ为什么不能跳过中间字段因为 BTree 索引按照a → b → c排序。缺少 a 时无法确定 b 的查找范围。Q范围查询为什么影响后面的字段因为范围查询只能确定一个范围。例如age20之后的数据顺序无法继续精确定位。总结最左前缀匹配原则记住三句话联合索引从最左字段开始匹配不能跳过中间字段遇到范围查询后续字段通常无法继续使用索引口诀从左往右匹配不能跳过遇到范围就停止。
延伸阅读

更多相关文章

2026/9/20 4:02:49

GIME2027西北(兰州)煤炭与煤化工业展览会,5月举办

GIME甘肃煤博会:丝路枢纽,链接西北能源新未来, GIME2027西北(兰州)煤炭与煤化工业展览会 Northwest Coal and Coal Chemical Industry Exhibition 举办时间:2027年5月14-16日 使用展馆:兰州丝路…

2026/9/22 8:01:12

scikit-learn安装全攻略:从环境配置到避坑指南

1. 项目概述:从一次恼人的安装错误说起如果你刚开始接触Python机器学习,那么scikit-learn(简称sklearn)几乎是你绕不开的第一个重量级库。它封装了从数据预处理、特征工程到模型训练、评估的完整流程,API设计优雅统一&…

2026/9/20 4:02:50

微信小程序web-view业务域名配置与深度排错指南

1. 问题现场&#xff1a;当web-view提示“不支持打开非业务域名”时 如果你正在开发微信小程序&#xff0c;并且在小程序里用到了 <web-view> 组件来加载一个H5页面&#xff0c;那么你大概率会遇到过这个弹窗&#xff1a;“不支持打开非业务域名”。这个提示一出来&am…

2026/9/22 19:51:27

智能抄表系统面试必问:3分钟吃透核心逻辑

智能抄表系统面试必问:3分钟吃透核心逻辑 面试被问原理答不上来?别慌,今天把智能抄表系统核心逻辑拆透。很多候选人背了八股文,一追问数据怎么从电表传到云端就卡壳。 这其实是 面试必问…

2026/9/22 19:51:27

阿波罗汽车自动驾驶栈配置避坑指南一文搞懂

阿波罗汽车自动驾驶栈配置避坑指南一文搞懂 配置环境就卡半天,是不是你的常态?很多刚接触阿波罗(Apollo)自动驾驶仿真与开发的朋友,一打开终端敲下 source 或者编译代码,屏幕就开始疯狂滚动日志,最后报出一堆 dependency…

2026/9/22 19:51:27

塞尔达血月多久一次保姆级教程:3分钟搞定配置不再卡半天

塞尔达血月多久一次保姆级教程:3分钟搞定配置不再卡半天 配置环境就卡半天?别慌,这坑我替大家踩过了。今天这篇保姆级教程,专门解决你因为“塞尔达血月多久一次”这种看似游戏机制,实则是前端数据驱动与状态管理难题而导致的开发阻塞。很多转岗前端的朋…

2026/9/22 19:51:27

九城社区论坛实战项目:版本升级API全变的底层真相

九城社区论坛实战项目:版本升级API全变的底层真相 版本升级后 API 全变了,是不是让你瞬间头大? 刚跑通的九城社区论坛代码,换个版本直接报红,报错信息比代码还长。 别慌,这不是你的锅,是底层通信机制在变脸。…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介&#xff1a;《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南&#xff0c;面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者&#xff0c;用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介&#xff1a;这份PPT围绕互联网业务安全托管服务展开&#xff0c;面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者&#xff0c;重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件&#xff0c;包体约30.63MB&#xff0c;以…

2026/9/22 0:04:49

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点 官方文档几百页翻到头还是懵?面试问到 输电线路在线监测 的数据链路时,脑子一片空白?别慌,这种 高频面试题 我整理了10年,专门治各种“文档太长抓不住重点”的毛病。…

2026/9/22 0:04:49

中介房源管理系统重构避坑:3个关键步骤搞定API变更

中介房源管理系统重构避坑:3个关键步骤搞定API变更 版本升级后 API 全变了,这种痛只有真做过的人懂。 很多团队在接手老旧房产项目时,最崩溃的不是代码烂,而是底层框架升级后,原本熟悉的接口调用方式彻底失效。 这份 保姆级教程…

2026/9/22 0:04:49

3个坑点带你一文搞懂55gg小游戏源码

3个坑点带你一文搞懂55gg小游戏源码 盯着控制台满屏的红色报错,看着那一长串 StackTrace ,是不是脑子瞬间宕机?别急,这种时候最忌讳的就是盲目改代码。很多刚入行的前端同学,面对 55gg 小游戏这类轻量级 H5…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/21 18:32:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码