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

数据库造神计划第十六天---索引(1)

  🔥个人主页:寻星探路

🎬作者简介:Java研发方向学习者

📖个人专栏: 、《

⭐️人生格言:没有人生来就会编程,但我生来倔强!!!


目录

一、索引的简介

1、什么是索引

2、为什么要使用索引

二、索引应该选择哪种数据结构

1、HASH

2、⼆叉搜索树

3、N叉树

4、B+树

4.1简介

4.2B+树的特点

4.3B+树与B树的对比

三、MySQL中的页

1、为什么要使用页

2、页文件头和页文件尾

3、页主体

4、页目录

5、数据页头


一、索引的简介

1、什么是索引

        MySQL的索引是⼀种数据结构,它可以帮助数据库高效地查询、更新数据表中的数据。索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。

         MySQL索引类似于书籍的目录,通过指向数据行的位置,可以快速定位和访问表中的数据,比如汉语字典的目录(索引)页,我们可以按笔画、偏旁部首、拼音等排序的目录(索引)快速查找到需要的字。

2、为什么要使用索引

        显而易见,使用索引的目的只有⼀个,就是提升数据检索的效率,在应用程序的运行过程中,查询操作的频率远远高于增删改的频率。

二、索引应该选择哪种数据结构

1、HASH

        时间复杂度是 O(1) ,查询速度非常快,但是MySQL并没有选择HASH做为索引的默认数据结 构,主要原因是HASH不支持范围查找

2、⼆叉搜索树

        ⼆叉搜索树的中序遍历是⼀个有序数组,但有几个问题导致它不适合用作索引的数据结构

(1)最坏情况下时间复杂度为O(N)

(2)节点个数过多无法保证树高

        AVL和红黑树,虽然是平衡或者近似平衡,但是毕竟是⼆叉结构

        在检索数据时,每次访问某个节点的子节点时都会发生⼀次磁盘IO,而在整个数据库系统中,IO是性能的瓶颈,减少IO次数可以有效的提升性能

3、N叉树

        为了解决树高的问题,我们可以使用N叉树

        通过观察,相同数据量的情况下,N叉树的树高可以得到有效的控制,也就意味着在相同数据量的情况下可以减少IO的次数,从而提升效率。但是MySQL认为N叉树做为索引的数据结构还不够好。

4、B+树

4.1简介

        B树就是一种特殊的N叉搜索树, B+树是在B树的基础上通过“双向链表”把叶子节点串起来

        B+树是⼀种经常用于数据库和文件系统等场合的平衡查找树,MySQL索引采用的数据结构,如下图所示:

4.2B+树的特点

(1)能够保持数据稳定有序,插入与修改有较稳定的时间复杂度

(2)非叶子节点仅具有索引作用,不存储数据,所有叶子节点保真实数据

(3)所有叶子节点构成⼀个有序链表,可以按照key排序的次序依次遍历全部数据

4.3B+树与B树的对比

(1)叶子节点中的数据是连续的,且相互链接,便于区间查找和搜索。

(2)非叶子节点的值都包含在叶子节点中

(3)对于B+树而言,在相同树高的情况下,查找任一元素的时间复杂度都⼀样,性能均衡。

(4)N叉树高度更低

三、MySQL中的页

1、为什么要使用页

        在 .ibd 文件中最重要的结构体就是Page(页),页是内存与磁盘交互的最小单元,默认大小为 16KB,每次内存与磁盘的交互至少读取⼀页,所以在磁盘中每个页内部的地址都是连续的,之所 以这样做,是因为在使用数据的过程中,根据局部性原理,将来要使用的数据大概率与当前访问的 数据在空间上是临近的,所以⼀次从磁盘中读取⼀页的数据放⼊内存中,当下次查询的数据还在这 个页中时就可以从内存中直接读取,从而减少磁盘I/O提高性能

局部性原理:

是指程序在执行时呈现出局部性规律,在⼀段时间内,整个程序的执行

仅限于程序中的某⼀部分。相应地,执行所访问的存储空间也局限于某个内存区域,局部性通常有两种形式:时间局部性和空间局部性。

时间局部性(TemporalLocality):如果⼀个信息项正在被访问,那么在近期它很可能还会被再次访问。

空间局部性(SpatialLocality):将来要用到的信息⼤概率与正在使用的信息在空间地址上是临近的。

数据页:叶子节点,存储若干个数据行
索引页 :非叶子节点, 只需要存储 key /子节点的位置

        每⼀个页中即使没有数据也会使用 16KB 的存储空间,同时与索引的B+树中的节点对应,查看页的大小,可以通过系统变量 innodb_page_size 查看

SHOW VARIABLES LIKE 'innodb_page_size';

        在MySQL中有多种不同类型的页,最常用的就是用来存储数据和索引的"索引页",也叫做"数据页",但不论哪种类型的页都会包含页头(FileHeader)和页尾(FileTrailer),页的主体信息使用数 据"行"进行填充,数据页的基本结构如下图所示:

2、页文件头和页文件尾

        页文件头和页文件尾中包含的信息,如下图所⽰:

        这⾥我们只关注,上⼀页页号和下⼀页页号,通过这两个属性可以把页与页之间链接起来,形成⼀个双向链表。

3、页主体

        页主体部分是保存真实数据的主要区域,每当创建⼀个新页,都会自动分配两个行,⼀个是页内最小行 Infimun ,另⼀个是页内最大行 Supremun ,这两个行并不存储任何真实信息,而是做为数据行链表的头和尾,第⼀个数据行有⼀个记录下⼀行的地址偏移量的区域 next_record 将页内所有数据行组成了⼀个单向链表,此时新页的结构如下所示:

        当向⼀个新页插入数据时,将 Infimun 连接第⼀个数据行,最后⼀行真实数据行连接 Supremun ,这样数据行就构建成了⼀个单向链表,更多的行数据插入后,会按照主键从小到大 的顺序进行链接,如下图所示

  

4、页目录

        当按主键或索引查找某条数据时,最直接简单的方法就是从头行 infimun 开始,沿着链表顺序逐个比对查找,但⼀个页有16KB,通常会存在数百行数据,每次都要遍历数百行,无法满足高效查 询,为了提高查询效率,InnoDB采用⼆分查找来解决查询效率问题;

        具体实现方式是,在每⼀个页中加入⼀个叫做页目录 Page Directory 的结构,将页内包括头 行、尾行在内的所有行进行分组,约定头行单独为⼀组,其他每个组最多8条数据,同时把每个组 最后⼀行在页中的地址,按主键从小到大的顺序记录在页目录中在,页目录中的每⼀个位置称为⼀ 个槽,每个槽都对应了⼀个分组,⼀旦分组中的数据行超过分组的上限8个时,就会分裂出⼀个新 的分组;

        后续在查询某行时,就可以通过⼆分查找,先找到对应的槽,然后在槽内最多8个数据行中进行遍历即可,从而大幅提高了查询效率,这时⼀个页的核心结构就完成了;

        例如要查找主键为6的行,先比对槽中记录的主键值,定位到最后⼀个槽2,再从最后⼀个槽中的第⼀条记录遍历,第⼆条记录就是我们要查询的目标行。

5、数据页头

        数据页头记录了当前页保存数据相关的信息,如下图所示

       由于内容较多,会分为多篇讲解,预知后续内容,请看后续博客!!!

http://www.dtcms.com/a/393086.html

相关文章:

  • 【软件推荐】免费图片视频管理工具,让灵感库告别混乱
  • C语言入门教程 | 阶段二:循环语句详解(while、do...while、for)
  • GEO(Generative Engine Optimization)完全指南:从原理到实践
  • Msyql日期时间总结
  • IP地址入门基础
  • 【ROS2】Beginner: CLI tools
  • LeetCode刷题记录----279.完全平方数(Medium)
  • H7-TOOL的250M示波器模组采集CANFD标准波形效果,开口逻辑0,闭口逻辑1
  • 打工人日报#20250920
  • 详解C/C++内存管理
  • SSM(springboot部分)
  • C++ std:string和Qt的QString有哪些差异?
  • FunASR开源项目实战:解锁语音识别新姿势
  • (华为杯)数学建模比赛编程助手
  • 通义千问对postgresql wire协议的连接和执行SQL过程的解释
  • 钣金折弯机被远程锁机了怎么办
  • 基于陌讯AIGC检测算法的高性能部署实践:FastAPI与多进程并发设计详解
  • 群晖 NAS 远程访问痛点解决:神卓 N600 公网 IP 盒实战体验
  • JavaWeb之HttpServletRequest与HttpServletResponse详解及快递管理系统实践
  • Git详细介绍
  • 大话计算机网络(上)
  • JVM方法调用机制深度解析:从aload_1到invokevirtual的完整旅程
  • STM32CubeIDE学习——安装
  • 追觅宣布进军手机市场,已经白热化的手机赛道追觅优势何在?
  • AI智能体开发工作流的成功案例分享及思路
  • 【算法基础】String、Hash 与 Stack
  • 使用springboot开发一个宿舍管理系统练习项目
  • 像素版推箱子游戏
  • 2025年CSP-J认证 普及组初赛真题解析 CCF信息学奥赛C++ 中小学初级组 第一轮真题-选择题解析
  • 【精品资料鉴赏】121页可编辑PPT详解医药集团合规管控规划方案