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

MySQL数据库索引并没有你想的那么难之第一节

从今天开始我将会为大家讲解MySQL的数据库索引,通过对行存储结构,数据页结构的理论学习,彻底掌握索引结构存储。为索引优化提供扎实的理论基础。

下面是我将要讲解的内容如下:

  1. 行存储结构
  2. 数据页结构
  3. 索引结构
  4. 索引的优化查找案例

图片如下大家可以暂停记录下来或者截图保存。
在这里插入图片描述

行存储结构

首先来讲解一下这个行存储结构,它主要包含变量字段列表和null值列表。它描述的是一条记录在数据文件当中是如何存储的。而行与行之间的关联关系,它是通过单向链表的方式来进行关联的。而这个单向链表的形成是通过记录头信息来完成的。而这个记录头信息及这个变长字段列表,还有这个NULL值列表这个三个字段,统称为行记录的额外信息。就是我们记录数据的每一条记录里面都会隐藏这三列。

下图是一张行存储结构图。其中列与列之间的数据是通过单向链表来完成记录的。
在这里插入图片描述

数据页结构

既然已经知道了一行数据的存储方式,那么我们是如何 将所有行的数据记录起来呢?
下面我要讲解的是数据页?
单独的数据页是我们管理行数据的一种方式。为什么会产生数据页呢?那是因为我们的计算机就是通过页来存储数据的而MySQL保存在计算机中,那肯定也是按照页的方式来存储数据。
我们都知道计算机中一个页的大小是16KB,而这16KB可以存储很多条行记录。因此MySQL的数据存储结构会将很多条记录进行一个分组,从而将数据按照分组来进行一个管理。
而分组之后,会形成一个叫做页目录的结构。

MySQL对行数据进行分组后那又是如何管理的呢?
分组之后会形成一个叫做槽的结构。这个槽存储的位置就在页目录的位置。因此通过这个页目录来管理这同一个页当中的所有的记录。

以上所说的都是单独一个页之间的是如何管理行记录信息的,属于比较微观方面的内容。那下面我们来说一个比较全局观一点的内容。

那页与页之间又是如何管理的?
页与页之间是通过双向列表来进行管理的。而每一个页当中又存储了很多条记录,这很多条记录又通过这个页目录进行管理。

当没有建立索引的情况下,我们输入select进行查询的时候,因为你查询的记录并不清楚是在那个页当中,因此你只能从第一个页开始查找。先查找到第一个页,然后查第一个页中的页目录,通过页目录在去遍历它里面行数据、在通过行数据遍历到所有的列信息。如果第一个页中不包含查找的内容就继续遍历第二个页中内容,直到遍历到查找的内容或者到最后一个页,结束查询。如图所示

在这里插入图片描述

以上是在没有索引的情况下的一个查询流程。

索引结构

如果有索引的情况下查找的方式会发生一点变化。
索引会先形成一个叫目录项的结构,这个目录项将你所有的页进行分组。这与之前我们说的没有索引情况下将所有页进行分组的设计思路是类似的。分组的规则则是会将数据进行排序,从而目录项中保存key则是这个索引分组中最大的索引值,其中page_no则是对应的分组页【这个分组下面的内容的单向链表排序则是按照索引值进行排序的】

在这里插入图片描述

索引的优化查找案例
知道了索引的知识点之后,那么有索引的查找方式就变得非常的简单了。
首先根据索引的值与目录项中key进行对比,从而确定在哪一个目录项,通过这个目录项记录的page_no来确定页,再通过页来找到你的内容。

由于增加了索引因此数据是经过排序之后的,我们只要对比索引值和目录项中的key的值就能定位到数据页,从而找到我们要的数据记录。

总结

以上就是我今天要讲的内容,想要了解更多内容,请关注我。我将会持续的输出相关内容给大家。大家有什么建议或意见请留言,我会在后续的内容中加以优化。

视频地址如下:

相关文章:

  • 数据结构与算法-单链表
  • 记一次git误操作, 合并冲突别人新增文件显示成“自己新增“绿色文件
  • Dubbo----------------------------配置信息整合SpringBoot的三种方式
  • 基于视觉的车道线识别技术在智能车导航中的应用研究
  • bleu-mp 多进程bleu评估工具
  • webpack多进程打包
  • 索尼IMX316 标定_ToF模块相机校准
  • 【Proteus仿真】【51单片机】智能鱼缸系统设计
  • 瑞吉外卖2.0 Redis 项目优化 Spring Cache MySQL主从复制 sharding-JDBC Nginx
  • 2023-02-04 Elasticsearch 倒排索引的理解 Trie前缀树原理
  • 【DIY小记】VMWare设置主机连接到的Ubuntu虚拟机的网络端口
  • Spring Boot 集成Quartz
  • 【Java学习】JUC并发编程
  • 【入门AUTOSAR网络管理测试】CANoe测试T_STARTx_AppFrame时间
  • Apache Shiro身份验证绕过(CVE-2023-22602)
  • Cadence PCB仿真 使用 Allegro PCB SI 为电源网络分配电压并选择仿真的电源网络的方法图文教程
  • (考研湖科大教书匠计算机网络)第三章数据链路层-第六节媒体接入控制3:载波监听多址接入-碰撞避免(CSMA-CA)协议
  • ocs系统介绍
  • JVM运行时数据区
  • PMP考试答题技巧及注意事项
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉