下来就诞生了索引页。表的实际数据是存放在数据页里的,表的索引也是存放在页里的,此时索引 放在页里之后,就会有索引页,假设有很多很多的数据页,那么就可以有很多的索引页,此时 如下图所示,网上摘抄的别人的图。
那么现在根据主键id查找一行数据,怎么找?此时有很多的索引页,怎么根据id查找数据?就上图来说,是去索引页20里找?还是去索引页28里找?这也是个大问题,接下来又可以把索引页多加一个层级出来,在更高的索引层级里,保存了每个索引页和索引页 里的最小主键值,如下图所示。
这样的话,如果要找id=40这条数据,就可以在索引页35里二分查找,可以看到1<40<58,所以只能去索引页20里去找数据。假如最顶层的那个索引页里存放的下层索引页的页号也太多了,怎么办呢? 此时可以再次分裂,再加一层索引页,比如下面图里那样子
索引页不知不觉中组成了多个层级,搞的是不是有点像一棵树? 没错了,这就是一颗B+树,属于数据结构里的一种树形数据结构,所以一直说MySQL的索引是用B+树 来组成的,其实就是这个意思。
所以,以最简单最基础的主键索引来举例,为一个表的主键建立起来索引之后,其实这个主键的索 引就是一颗B+树,要根据主键来查数据的时候,直接就是从B+树的顶层开始二分查找,一层 一层往下定位,最终一直定位到一个数据页里,在数据页内部的目录里二分查找,找到那条数据。 这就是索引最真实的物理存储结构,采用跟数据页一样的页结构来存储,一个索引就是很多页组成的一 颗B+树。索引页+数据页组成的B+树就是聚簇索引
如果一颗大的B+树索引数据结构里,叶子节点就是数据页自己本身,那么称这颗 B+树索引为聚簇索引!
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
添加我为好友,拉您入交流群!
请使用微信扫一扫!