MySQL的索引建立的过程

Innodb中存储空间管理的最小单位是页,页的默认空间是16KB,每个页中存放了数据。页与页之间是通过双向链表来连接的。索引页中的数据都会按照主键的值从小到大排列并用单向链表连接起来。
 
我们先说说在没有索引的情况下是怎么查找一条记录的。 因为每个页中数据都是没有规律的,所以我们不得不遍历所有的页来得到这条数据。这样查询的效率就会很低。所以需要为记录生成一个目录页来记录这些数据。
在建立目录的过程中规定了下一个数据页的主键值必须大于上一个数据页的主键值。当一个页中的数据超出了范围了就产生一个新的页存放,这个过程会产生页分裂,数据的移动,比如主键值小的会跑去上一个页,主键值大的往后一个页移动。
2,0,3这些是页的头信息,2表示的是最小记录,0表示普通记录,3表示的是最大记录,还有就是如果是1的话表示的是目录项记录

 

 
但是问题来了,页与页之间可能并不是相邻的,也就是说可能上一个页的页号是10,下一个页的页号是20,但是这些页之间是通过双向链表来进行连接的。那么怎么去快速访问到特定的页号呢,答案就是再为每个目录页再建立一个目录项:
 

 

每一个目录项中包含了两个内容,一个是目录页中的最小主键值,另一个是页目录号就是页号。这样就可以快速的根据主键值定位到一条记录。这种目录项就叫做索引
 
参考文献:《MySql是怎样运行的:从跟上理解MySQL》
posted @ 2019-06-21 13:56  丁茜萌萌哒  阅读(3154)  评论(0编辑  收藏  举报