InnoDB存储引擎-索引与算法
InnoDB存储引擎索引概述InnoDB存储引擎支持以下几种常见的索引:B树索引 (关系型数据库最常见的索引)全文索引自适应哈希索引B树B树 是为磁盘或其他直接存取辅助设备设计的一种平衡查找树. 在 B树中, 所有记录节点都是按键值的大小顺序存放在同一层叶子节点上.所有记录都存放在叶子节点, 并且是顺序存放的.B树索引B树索引 的本质就是B树在数据库中的实现. B树索引在数据库中有一个特点就是高扇出性, 因此在数据库中, B树的高度一般在 2-4 层.数据库中的 B树索引可以分为 聚集索引 和 辅助索引.每个数据页都通过一个双向链表来进行链接.聚集索引聚集索引就是按照每张表的主键构造一棵 B树, 同时叶子节点中存放的即为整张表中的行记录数据.聚集索引的这个特性决定了索引组织表中数据页是索引的一部分.由于实际的数据页只能按照一棵B树进行排序, 因此每张表只能有一个聚集索引.使用聚集索引的好处:①: 聚集索引能够在 B 树索引的叶子节点上直接找到数据.②: 由于定义了数据的逻辑顺序, 聚集索引能够很快地针对数据范围的访问.(范围查找和排序很快)特点:聚集索引的叶子节点存放的是完整的行记录; 非叶子节点存放的是索引,不是完整的行记录.聚集索引的存储并不是物理上连续的, 而是逻辑上连续的. 页通过双向链表链接, 页按照主键的顺序排序;每个页中的记录页是通过双向链表进行维护的.非聚集索引 (辅助索引)叶子节点并不包含完整的行记录.辅助索引的存在并不影响数据在聚集索引中的组织, 因此每张表上可以有多个辅助索引.查找过程:当通过辅助索引来查找数据时, InnoDB 存储引擎会遍历辅助索引并通过叶级别的指针获得指向主键索引的主键,然后再通过主键索引来找到一个完整的行记录回表.Cardinality 值略B树索引的使用✅设计索引的时候有哪些原则考虑哪些因素联合索引联合索引是指对表上多个列进行索引. 从本质上来说 联合索引页是一棵 B树, 不同的是联合索引的键值的数量不是 1 , 而是大于等于 2.联合索引的好处:① 查询中有多个查询条件并且符合最左匹配原则, 那么查询都可以用到索引.② 索引本身已经对第一个键值后的键值进行了排序处理.覆盖索引从辅助索引中就能得到查询的记录, 而不需要查询聚集索引中的记录.SQL语句成本查询的 Extra 列的 Using index 就表明使用了覆盖索引.当我们进行数据统计的时候, 优化器会选择通过覆盖索引 而不会选择聚集索引, 因为覆盖所有的叶子节点没有存整个行记录, 因此大小要远小于聚集索引.索引下推索引下推Index Condition PushdownICP是MySQL 5.6引入的一种优化技术核心思想是让存储引擎在扫描索引时直接过滤掉不符合条件的记录减少回表次数从而提升查询性能。如果Extra列包含Using index condition说明启用了索引下推。工作原理假设有一个联合索引(a, b)执行以下查询SELECT*FROMtableWHEREa1ANDb10ANDcxxx;没有索引下推时存储引擎通过索引找到a 1的所有记录。回表获取完整数据行交给 MySQL 服务层。服务层再根据b 10和c xxx进一步过滤。启用索引下推后存储引擎通过索引找到a 1的记录后**直接在索引层过滤 **b 10即使c不在索引中。仅对满足a 1 AND b 10的记录回表。服务层再过滤c xxx。关键点将WHERE条件中索引列的筛选提前到存储引擎层处理减少无效回表。适用场景联合索引的部分列作为条件例如索引是(a, b)查询条件是a 1 AND b 10 AND c 5ICP 会直接过滤a和b。需要回表的查询如果查询的列不全在索引中例如需要SELECT *ICP 能显著减少回表的数据量。如何确认是否使用 ICP通过EXPLAIN查看执行计划如果Extra列包含Using index condition说明启用了索引下推EXPLAINSELECT*FROMtableWHEREa1ANDb10;示例对比表结构CREATETABLEusers(idINTPRIMARYKEY,nameVARCHAR(50),ageINT,cityVARCHAR(50),INDEXidx_age_city(age,city));查询SELECT*FROMusersWHEREage20ANDcityLIKEN%ANDnameJohn;无 ICP存储引擎通过索引idx_age_city找到age 20的所有记录。回表获取完整数据交给服务层。服务层过滤city LIKE N%和name John。有 ICP存储引擎通过索引idx_age_city找到age 20的记录后**直接过滤 **city LIKE N%。仅对满足age 20 AND city LIKE N%的记录回表。服务层再过滤name John。注意事项仅适用于二级索引如 InnoDB 的非主键索引。条件必须涉及索引列例如WHERE a 1 AND b 10其中(a, b)是联合索引。某些场景可能不生效使用函数或类型转换时如WHERE UPPER(a) X。总结索引下推通过将过滤条件“下推”到存储引擎层减少了回表的数据量尤其对联合索引和范围查询效果显著。结合执行计划 (EXPLAIN) 分析可以更好地利用这一优化。哈希算法略全文检索MySQL5.6 后开始支持全文索引.略.

相关新闻

Kun v0.3.5 版本深度解析:全局命令面板、长会话数据安全与 Windows 兼容性全面加固

Kun v0.3.5 版本深度解析:全局命令面板、长会话数据安全与 Windows 兼容性全面加固

人工智能AI Agent自主智能体桌面应用MCP Clients 【免费下载链接】Kun Local-first AI agent workspace for coding, writing, design, research, and automation — one runtime for desktop GUI and TUI. 项目地址: https://gitcode.com/gh_mirrors/de/Kun 点击查…

2026/10/12 3:06:46 阅读更多 →
STM32 | ADC数字滤波算法实现与代码案例

STM32 | ADC数字滤波算法实现与代码案例

uint16_t ADC_IN_1(void) //ADC采集程序 {HAL_ADC_Start(&hadc1);//开始ADC采集HAL_ADC_PollForConversion(&hadc1,500);//等待采集结束if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))//读取ADC完成标志位{return HAL_ADC_GetValue(&ha…

2026/10/12 3:06:46 阅读更多 →
C-SAM超声扫描失效分析避坑指南:从样品制备到图像判读的实战经验

C-SAM超声扫描失效分析避坑指南:从样品制备到图像判读的实战经验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 3:06:46 阅读更多 →

最新新闻

DAY70:前端Leader转型AI Agent工程师的认知跃迁

DAY70:前端Leader转型AI Agent工程师的认知跃迁

1. 为什么“DAY70”这个数字比“AI Agent”更值得深挖看到标题里那个醒目的“DAY70”,我第一反应不是去查AI Agent的最新论文,而是下意识翻开了自己三年前的项目日志——那会儿我正带一个五人前端团队,同时在啃LangChain源码、调试RAG pipeli…

2026/10/12 4:03:26 阅读更多 →
Kubernetes离线部署CoreDNS v1.8.0镜像导入与DNS解析实战

Kubernetes离线部署CoreDNS v1.8.0镜像导入与DNS解析实战

简介:coredns_v1.8.0.tar.gz 面向 Kubernetes 集群运维与部署人员,提供 v1.8.0 版本的 CoreDNS 镜像离线包,适用于 k8s v1.21.2 环境,可解决内网或受限网络下无法拉取官方镜像、集群 DNS 组件部署受阻的问题。压缩包共 8 个文件&a…

2026/10/12 4:03:26 阅读更多 →
iOS原生侧滑菜单实现:手势、布局与生命周期协同

iOS原生侧滑菜单实现:手势、布局与生命周期协同

简介:本资源是一份面向iOS初中级开发者的侧滑菜单栏实现方案,聚焦于点击按钮触发View位移动画的轻量级交互设计,适用于需要快速集成导航菜单或功能入口的App项目。压缩包共25个文件,包含7个Objective-C实现文件(.m/.h&…

2026/10/12 4:03:26 阅读更多 →
DataGridView 实现树形表格:自绘缩进、展开折叠与性能优化全指南

DataGridView 实现树形表格:自绘缩进、展开折叠与性能优化全指南

简介:面向 WinForms 开发者的 DataGridView 树形列表实现示例,解决表格控件无法直接展示层次数据的痛点。资源以 Visual Studio 2012 C# 为环境,提供完整项目与源码,涵盖树节点模型定义、控件扩展、数据绑定、列显隐控制、绘制展…

2026/10/12 4:03:26 阅读更多 →
Ubuntu下WPS中文显示方块?fontconfig字体配置与别名映射实战

Ubuntu下WPS中文显示方块?fontconfig字体配置与别名映射实战

简介:这份资源面向在 Ubuntu 系统下使用 WPS 办公软件、却频繁遇到字体缺失提示的用户,尤其是需要处理含特殊符号文档的办公与排版人群。当 WPS 弹出缺少 Symbol、Wingdings、Wingdings 2、Wingdings 3 等字体的警告时,文档中的符号与图形往往…

2026/10/12 4:03:26 阅读更多 →
WinForms Chart 时间轴实战:DateTime 转 OADate 与滚动条控制

WinForms Chart 时间轴实战:DateTime 转 OADate 与滚动条控制

简介:这份资源围绕VS自带Chart控件展开,面向需要在WinForms项目中实现时间轴图表的.NET开发者,重点解决x轴按时间刻度显示并配合滚动条浏览长时数据的问题。示例采用从Excel读取数据的方式,x轴时间格式为MM-dd HH:mm:ss:fff&#…

2026/10/12 4:02:25 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →