浅析InnoDB引擎的索引和索引原理

yumo6663个月前 (04-05)技术文章19

什么是InnoDB的索引

InnoDB的索引就是一颗B+树。页是InnoDB引擎在内存和磁盘之间交换数据的基本单位,页的大小一般是16KB,页的大小可以在启动MySQL服务的时候通过更改innodb_page_size参数来设置。而InnoDB索引的节点就是页。

B+树的叶节点上的页是数据页,用于存放用户存入数据库中的一条一条的记录,而非叶子节点上的页是索引页,存放索引记录。一个节点存一个页,所以又有”索引就是数据,数据就是索引“之说。B+树同一层上的页又是以双向链表的形式来组织的。在数据页和索引页中,所有的记录中都会存储下一条记录相对页0字节处的偏移量,从而将同一个页中的所有记录连成一个单链表(可以看成是一个单链表)的形式。

所以从数据库的表中查找记录可以分为两步:

  1. 定位到记录所在的页
  2. 定位到页中的具体记录

快速定位到页中的记录

数据页的大致结构:

在数据页中,所有的记录都是通过主键来排序,在数据页中有两条特殊的记录分别是Infimum和Supremum分别代表最小项和最大项。数据页中还有一个结构就是目录项,用来快速定位页中的记录。其原理是:数据页中的所有记录会按顺序被分为多个组(每组4到8条记录),而目录项中存的就是组中最后一条记录相对所在页0字节处的偏移量。这样在页中查找数据就可以先在目录项中快速定位到记录所在的范围,然后通过遍历找到记录。在索引页中查找记录与之类似。

定位到记录所在的页

索引页中主要存的其实也是一条一条的记录,记录中存的是当前节点的子节点的页号,以及对应页中的最小主键值。而索引页中的记录也是通过记录中的主键值来排序的。这样就可以在查找一条记录时,从B+树的根节点开始,以一种多分的策略快速定位到记录所在的页。

相关文章

DeepSeek本地RAG知识库(17):向量数据库原理讲解(小白也能懂)

大家好!我是程序员寒山。近日很多小伙伴问,为什么要用向量数据库?它到底是怎么存储数据的?今天就给大家揭秘一下向量数据库,看看它有什么神奇的地方?一、什么是向量数据?——菜谱变"坐标"说向量数据库前,首...

数据库系统原理:不相关子查询

数据查询是数据库的核心操作。SQL语言允许多层嵌套查询,也叫子查询。它使用户可以用多个简单的查询构成复杂的查询,从而增强SQL的查询能力。嵌套查询有两种形式,相关子查询和不相关子查询。学习SQL的不相...

关系型数据库原理-1 ---关系代数笛卡尔积

1、关系数据库的基本概念(1)属性和域 在现实世界中,要描述一个事物常常取若干特征来表示,这些特征成为属性。例如,用学号、姓名、性别、年龄和籍贯等属性来描述学生。每个属性取值范围对应一个值的集合,成为...

数据库系统原理:模式的定义与删除

SQL命令包括数据定义、查询、操纵和控制四大类,其中SQL的数据定义用于创建数据库中的各种数据对象。SQL的数据定义包括对SQL数据库、模式、基本表、视图和索引的创建和撤销操作。学习用SOL语言定义数...