Msyql之索引
Mysql索引默认InnoDB引擎Mysql索引的排序规则左前原则字符串排序核心规则1.英文字符例子2. 中文排序例子3.collate的规则按照储存结构聚簇索引主键索引/聚集索引二级索引非聚簇索引/辅助索引按照索引数量单列索引复合索引联合索引实战示例复合索引与最左前缀原则按照索引特性普通索引唯一索引主键索引唯一非空全文索引空间索引很少用这里不作介绍MySQL 覆盖索引 回表查询InnoDB概括1. 回表查询需要回表2. 覆盖索引不回表Using indexMysql索引的排序规则左前原则一句话联合索引 (col1,col2,col3)B 树叶子节点是先按 col1 排序col1 相同再 col2col2 相同再 col3。查询时要从索引最左边开始连续匹配索引才能生效一旦遇到范围条件 between like 前缀模糊后面的索引列失效。字符串排序字符串也遵循左前原则用第一个字符串索引的第一个字符从前往后依次排序字符大小以ASCII码表为基础。核心规则核心MySQL 里字符串排序name varchar按字符的编码字符集对应的编码值比较不是简单字典序字符集决定排序规则 (collate)1.英文字符例子我们例子里的 nameli、wang、zhangutf8mb4 常用排序 utf8mb4_general_cici case insensitive 不区分大小写L 和 l 当成一样cs case sensitive 区分大小写字母顺序li wang zhang比较逻辑从左到右逐个字符对比第一个不一样的字符就分出大小l (108) w (119) → l 更小li 排在最前面w z → wang 在 zhang 前面举个字符串对比细节zhang 和 zhao第 1 位 z z第 2 位 h h第 3 位 a a第 4 位 n vs o → n 编码更小✅ 所以 zhang zhao2. 中文排序例子中文名字重点面试容易忽略如果 name 是中文不是按拼音默认排序utf8mb4_general_ci按汉字 utf 编码值排序不是拼音utf8mb4_unicode_ci更标准 unicode 排序utf8mb4_0900_as_ci新版本推荐如果想要按拼音排序要专门的 collate例如 utf8mb4_pinyin_ci比如张三、李四直接用 utf8mb4_general_ci不一定李四在前要看编码值不是拼音 LiZhang。3.collate的规则回到联合索引 (name,age) 的排序逻辑先比较name按字符集 collate 规则比较字符串name 相等 → 再比较 age数字直接比大小按照储存结构聚簇索引主键索引/聚集索引InnoDB 特有主键就是聚簇索引叶子节点保存完整的一行数据一张表只能有 1 个聚簇索引如果没有主键InnoDB 会找唯一非空索引都没有就自动生成隐藏 rowid 作为聚簇索引即 MySQL 自动生成的排序 ID 序号二级索引非聚簇索引/辅助索引除聚簇索引之外都是二级索引叶子节点索引列 主键值不存完整行一张表可以多个二级索引在MysqlInnoDB引擎中使用改良版的B树存储数据而创造一个二级索引本质上就是创建一颗新的B树以创造的索引或者复合索引列为主键而叶子节点储存的数据叶为原表的主键ID和以原表为模版创造的索引或者复合索引按照索引数量单列索引最基础索引允许重复、允许 NULL只用来加速查询CREATEINDEXidx_addressONuser(address);复合索引联合索引多个字段组成一个索引遵循最左前缀原则CREATEINDEXidx_name_ageONuser(name,age);实战示例复合索引与最左前缀原则假设有一张用户订单表经常需要按user_id和order_time组合查询-- 创建包含两个字段的复合索引CREATEINDEXidx_user_timeONorders(user_id,order_time);使用EXPLAIN查看索引命中情况-- 命中复合索引最左前缀生效EXPLAINSELECT*FROMordersWHEREuser_id1001ANDorder_time2026-01-01;-- 命中复合索引只用到最左列 user_idEXPLAINSELECT*FROMordersWHEREuser_id1001;-- 无法命中复合索引跳过了最左列 user_idEXPLAINSELECT*FROMordersWHEREorder_time2026-01-01;最左前缀原则的生效条件复合索引(user_id, order_time)按「最左列优先」组织 B 树。只有当查询条件中包含最左列user_id时索引才会被命中若查询只用到order_time而跳过user_id则无法走该复合索引只能全表扫描或另建索引。按照索引特性普通索引最基础索引允许重复、允许 NULL只用来加速查询CREATEINDEXidx_addressONuser(address);唯一索引索引列的值不能重复可以有 NULL多个 NULL 是允许的CREATEUNIQUEINDEXidx_phoneONuser(phone);主键索引唯一非空特殊的唯一索引非空 唯一同时作为聚簇索引。全文索引用于长文本模糊搜索替代 like ‘%关键词%’like 前缀 % 不走普通索引CREATEFULLTEXTINDEXidx_contentONarticle(content);//模版SELECT*FROMarticleWHEREMATCH(content)AGAINST(mysql);例子空间索引很少用这里不作介绍MySQL 覆盖索引 回表查询InnoDB概括前提InnoDB 是聚簇索引主键索引叶子节点存完整行数据二级索引叶子节点只存【索引列 主键】。回表通过二级索引查到主键再拿着主键去主键索引里读取完整行数据。覆盖索引查询需要的所有字段都在二级索引里面不需要回表explain 里 Extra 显示 Using index。CREATETABLEuser(idINTPRIMARYKEYAUTO_INCREMENT,-- 主键聚簇索引nameVARCHAR(32),ageINT,addressVARCHAR(100));-- 创建二级联合索引idx_name_age (name, age)CREATEINDEXidx_name_ageONuser(name,age);索引结构主键索引叶子节点 id - 整行(id,name,age,address)二级索引 idx_name_age叶子节点 (name,age) - id1. 回表查询需要回表示例 SQLsqlSELECTname,age,addressFROMuserWHEREname张三;执行过程在二级索引 idx_name_age 根据 name‘张三’ 找到记录拿到 name、age、id但是 SQL 需要查询 address二级索引没有 address拿着拿到的 id去主键索引查找整行数据取出 address 这个第二步操作就叫回表explain 结果重点plaintexttype: refkey: idx_name_ageExtra: NULL 没有Using index发生回表一句话二级索引只存索引列 主键查不在索引里的字段就要回主键索引再查一次。2. 覆盖索引不回表Using index查询的所有列全部包含在索引中不需要回表示例 SQLsqlSELECTname,ageFROMuserWHEREname张三;执行过程在二级索引 idx_name_age 找到 name‘张三’查询需要的字段 name、age 就在二级索引叶子节点直接返回不用回表explain 结果重点plaintexttype: refkey: idx_name_ageExtra: Using index – 代表触发覆盖索引✅ 另外二级索引叶子自带主键 id所以下面这条也属于覆盖索引sqlSELECTid,name,ageFROMuserWHEREname张三;索引是(name,age)叶子节点存 (name,age,id)三个字段全都有不需要回表。❌ 下面这条不是覆盖索引会回表sqlSELECTname,age,addressFROMuserWHEREname张三

相关新闻

纯C++坦克大战源码解析:控制台游戏开发与编译避坑指南

纯C++坦克大战源码解析:控制台游戏开发与编译避坑指南

简介:纯C坦克大战代码是一份面向C初学者的游戏开发实战项目,通过从零构建坦克大战,帮助学习类与对象、继承多态、游戏循环、状态机、事件处理、图形绘制与资源管理等核心知识。压缩包约1.37MB,以C源码工程为主,适合直接…

2026/10/11 17:18:13 阅读更多 →
CE6.3中文版内存调试实战:扫描、断点与自动汇编

CE6.3中文版内存调试实战:扫描、断点与自动汇编

简介:CE6.3中文版是Cheat Engine的汉化便携工具包,面向游戏修改爱好者、单机玩家与程序调试人员,解决游戏数值查找、内存编辑与进程分析等需求。该资源共含78个文件,约7MB,主力为exe主程序与dll动态库,另有…

2026/10/11 17:18:13 阅读更多 →
企业报表管理解决方案:元数据、调度与权限控制实战指南

企业报表管理解决方案:元数据、调度与权限控制实战指南

简介:以微软MOSS平台为核心的企业报表管理解决方案PPT演示文稿,面向企业IT规划人员、财务及业务报表管理人员,针对大型企业人工报表汇总效率低、易出错、格式难以快速定制等普遍痛点,提出了一条自动化、标准化、集中化的建设路径。…

2026/10/11 17:17:12 阅读更多 →

最新新闻

CMake构建实战:核心逻辑、依赖管理与排错指南

CMake构建实战:核心逻辑、依赖管理与排错指南

你有没有过这种经历:一个项目从单个 main.cpp 变成十几个目录,编译命令从一行 g 变成一长串带路径的参数,最后谁也不愿意去碰构建脚本。我在这场混乱里挣扎了很久,最后老老实实把整个工程的构建交了给 CMake 这一层“元构建工具”…

2026/10/11 19:47:43 阅读更多 →
多模态情感分析实战:基于Python的文本语音图像视频融合指南

多模态情感分析实战:基于Python的文本语音图像视频融合指南

简介:一套基于Python实现的多模态融合情感分析项目资源,面向毕业设计、课程作业等学生开发者,解决文本、语音、图像与视频四类输入下的情感识别与融合分析问题。资源共包含21个文件,整体56.86MB,其中Python脚本承担数据…

2026/10/11 19:47:43 阅读更多 →
JWT Payload与Claims详解:从三段结构到七个标准字段的工程实践

JWT Payload与Claims详解:从三段结构到七个标准字段的工程实践

几乎所有写过后端接口的开发者,都经历过这样一个场景:登录接口返回了一长串token,你把它粘贴到jwt.io上,中间那段Base64字符串里清清楚楚写着用户ID、角色、过期时间,有时候甚至能看到手机号和邮箱。那段字符串就是JWT…

2026/10/11 19:47:43 阅读更多 →
管道焊缝缺陷检测数据集:YOLOv5格式解析与训练实战

管道焊缝缺陷检测数据集:YOLOv5格式解析与训练实战

简介:这份资源面向从事工业质检、缺陷识别方向的目标检测学习者与工程人员,提供管道焊接缝缺陷检测数据集,按YOLOV5目录格式整理,可直接投入训练,省去格式转换与标注清洗的繁琐环节。数据为800800的RGB图像&#xff0c…

2026/10/11 19:47:43 阅读更多 →
C++过滤器模式实战:从原理到现代C++演进

C++过滤器模式实战:从原理到现代C++演进

过滤器模式这名字听起来像是个高大上的Golang中间件专属概念,但实际上它最早被总结成一种通用设计模式时,场景非常朴素:给你一堆对象,让你按照各种条件筛出一部分来。C里最典型的表现就是,业务代码里四处都是if判断、循…

2026/10/11 19:47:43 阅读更多 →
IEC 81346-2-2019类对象与代码:统一设备身份的工程指南

IEC 81346-2-2019类对象与代码:统一设备身份的工程指南

简介:IEC 81346-2-2019《第2部分:类对象和代码的分类》是国际电工委员会发布的工业自动化系统和集成系列标准的重要构成,面向自动化工程师、系统架构师、设备维护人员及标准合规人员,用于统一类对象的分类和代码标识,解…

2026/10/11 19:46:42 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →