MySQL的索引建立的过程(二)

前面只是实现了一个简单的索引方案,因为我们假设的是所有的目录项都是连续存储的。而且一个页的大小是有限的,当数据量比较大的时候显然是不行的,而且如果要将一个目录页中的记录删除,则需要进行大量的数据移动。显然这样是不太好的。
 
所以想一个解决的方案。我们发现其实这个目录项和我们的用户记录的信息差不多,只不过目录项中存的是主键号和页号。所以我们可以复用这一结构,但是得区分一下目录项和普通的用户记录,我们之前讲过头信息1表示的是目录项记录,所以用1来表示这是一条目录项记录。现在的样子就是这样:

 

显然我们会想如果数据量大了超过了16KB呢,答案是再来一个页来保存上目录项的记录。也就是这样的:

 

但是还是有问题,想想 ,我们现在这个结构想要根据主键去查一条记录先要去查找目录项的页号,再去目录项。最后找到存放真是数据的地方。当数据量很大的时候,这些目录项页号可能是不连续的。那我们怎么办呢? 当然是再建立一个目录页来管理这些目录项的页,结构就变成了这样了:

 

等等,这东西为什么这么眼熟啊,对了 ,这不是一颗树的结构吗,没错这就是传说中的B+树 。
 
参考文献:《MySql是怎样运行的:从跟上理解MySQL》
posted @ 2019-06-21 18:04  丁茜萌萌哒  阅读(713)  评论(0编辑  收藏  举报