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

MySQL索引结构(B+tree的数据结构)

Mysql · May 04, 2019

在数据库中建表时,为了提高数据的检索速度总会考虑对部分字段创建索引。

一、什么是索引?

百度百科中这样介绍到:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。


简单理解:在数据中,按照一定规则(排序)的数据结构设计,实现存储在磁盘上的一批索引文件,这些文件可以实现快速定位(减少了磁盘I/O次数)目标数据。


亦可以理解为:索引就是按照一定规则的数据结构设计,实现在存储在空间的一批介质。这些东西可以提高寻找的目标的速度。


举个栗子:利用字典查 “你” 字时,使用了两种方法。

A:偏旁部首方法

①、通过部首 “亻”,

、然后数 “尔” 总共有5个比划,在对应的比划数中去最终找到 “你”字在字典的某一页。

B:拼音检索

①、通过声母 “N”,

②、再找到韵母 “i”,最终找到 “你”字在字典的某一页。

在这两个过程中,目的为:在字典中找到 “你” 字。那么就可以将A、B方法中的步骤就可以看做是 “你” 字的索引,两者的目的都是快速定位 “你” 字,减少其他不必要的查找时间。(个人观点


二、MySQL的索引结构(5.6版本)

MySQL默认的索引结构是:B+tree

B+tree是一个B树的变种,有着比B树更高的查询性能,B+Tree所有索引数据都在叶子节点上,并且增加了顺序访问指针,每个叶子节点都有指向相邻叶子节点的指针。特别适合排序等操作。

n 阶B+tree有以下特征:

1、有n个子树节点就包含有n个元素。

2、根节点和分支节点中不保存数据,只用于索引,所有数据都保存在叶子节点中。

3、所有分支节点和根节点都同时存在于子节点中,在子节点元素中是最大或者最小的元素。

4、叶子节点会包含所有的关键字,以及指向数据记录的指针,并且叶子节点本身是根据关键字的大小从小到大顺序链接。


以下是一个3阶B+tree的直观图:

三阶-四阶-五阶随着数据量的增加,B+tree这个树可以变得越来越宽,越来越高I/O次数 永远和阶数m相关。

本文源自微信公众号:1米多的李同学