一图教你看懂mysql 索引实现原理之 B+Tree结构

总所周知,数据库查询优化离不开索引,虽然它是个简单的东西,可是其中却大有学问。

因追求极简,直接讲解其中原理

先来讲解一下索引的优缺点叭,一句话就可以概括,以空间换时间。

MySql  创建索引过程:首先进行该字段的排序,再生成叶子节点,再生成枝节点,最后生成根节点。

整个索引的结构就生成完毕了,如下图:

举个例子:有100条数据,ID为1-100,以这个ID建立索引,我们来查找ID在50-73之间的数据集合,

如图中红色箭头所示,只需要5次IO就可以查询出需要的数据。

索引分两种,聚簇索引和非聚簇索引,首先我们来看第一种

聚簇(区)索引:

  1. 如果表中设置了主键(例如ID列),自动根据ID列生成索引树
  2. 如果没有设置主键,自动选择第一个唯一键的列作为聚簇索引
  3. 自动生成隐藏的聚簇索引

接下来我们看看B-Tree的构建过程:

  • 叶子节点: 存储数据行时就是有序的,直接将数据行的page作为叶子节点(相邻的叶子结点,有双向指针)
  • 枝节点  : 提取叶子节点ID的范围+指针,构建枝节点(相邻枝节点,有双向指针)
  • 根节点  : 提取枝节点的ID的范围+指针,构建根节点

接下来,来看看数据库实际数据存放:

B-Tree算法演变

猜你喜欢

转载自blog.csdn.net/cslx5zx5/article/details/106885271