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

yumo6664周前 (04-05)技术文章17

什么是InnoDB的索引

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

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

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

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

快速定位到页中的记录

数据页的大致结构:

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

定位到记录所在的页

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

相关文章

数据库系统原理:数据插入

SQL命令包括数据定义、查询、操纵和控制四大类。SQL数据操纵包括数据插入、数据删除和数据修改。数据操作即SQL的数据更新命令。也就是说要完成向表中添加若干行数据、修改表中的数据和删除表中的若干行数据...

数据库的存储原理

1. 数据存取在数据库管理系统中,数据的存取过程为:应用程序通过 DML 向 DBMS 发出存取请求,如 SELECT 语句;对命令进行语法检查,正确后检查语义和用户权限(通过数据字典 DD),并决定...

一文搞懂数据库索引原理

前言写数据库,我第一时间就想到了MySQL、Oracle、索引、存储过程、查询优化等等。不知道大家是不是跟我想得一样,我最想写的是索引,为啥呢?以下这个面试场景,不知道大家熟悉不熟悉:面试官:数据库有...

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

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

面试官:说一下数据库事务的实现原理

#数据库事务的实现原理是什么样的?#什么是数据库事务?数据库事务的四大特性?数据库事务隔离级别?数据库事务的实现原理?一、什么是数据库事务?数据库事务是指作为一个不可分割的操作单元执行的一系列数据库操...

数据库系统原理:外键约束

关系数据库中最重要的约束是实体完整性和参照完整性。在SQL中,参照完整性称为外键约束。学习SQL中参照完整性的实现方法。一、参照完整性定义外键约束指参照完整性检查。根据参照完整性规则,依赖关系中外键或...