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

yumo6664个月前 (04-05)技术文章28

什么是InnoDB的索引

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

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

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

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

快速定位到页中的记录

数据页的大致结构:

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

定位到记录所在的页

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

相关文章

数据库系统原理:数据独立性

数据库系统的三级模式和两级映像使数据具有独立性。数据库系统三个抽象级间通过两级映像进行相互转换,使得数据库的三级模式形成一个统一整体,从而保证了数据的独立性。数据独立性是指应用程序与数据间相互独立,不...

数据库系统原理:聚集函数

SQL命令包括数据定义、查询、操纵和控制四大类,其中数据查询是数据库的核心操作。学习在SQL数据查询中使用聚集函数的方法。一、五种聚集函数介绍聚集函数(集合函数)→垂直方向(一个值):主要用法是在垂直...

数据库系统原理:数据删除

SQL命令包括数据定义、查询、操纵和控制四大类。其中,数据操纵即数据更新包括数据插入、数据删除和数据修改三类。首先学习数据删除命令的用法。一、数据删除命令的基本用法语法:Delete From 基本表...

详解MySQL事务原理

今天给大家分享的是大数据开发基础部分MySQL的事务,事务在MySQL知识点中非常重要的部分,很多伙伴只是知道MySQL的四大特性,但不知道其中的原理,老刘这次给大家详细的描述MySQL四大特性的原理...