加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.zhandada.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

新增数据时,MySQL索引树的自调整过程

发布时间:2022-12-03 14:02:37 所属栏目:MsSql教程 来源:未知
导读: 刚开始你一个表建好后,就一个数据页,就是聚簇索引的一部分,而且还是空的。若你插入数据,就是直接往这数据页里插入,也没必要给他弄索引页:

初始数据页就是个根页,每个数据页内部默认

刚开始你一个表建好后,就一个数据页,就是聚簇索引的一部分,而且还是空的。若你插入数据,就是直接往这数据页里插入,也没必要给他弄索引页:

初始数据页就是个根页,每个数据页内部默认就有一个基于主键的页目录,所以根据主键查找都没问题,直接在这唯一一个数据页里根据页目录找。

但随着表里数据越来越多,你的数据页满了,就要搞个新数据页,将你根页面里的数据都拷贝过去mssql重建索引,同时再搞一个新的数据页,根据你的主键值的大小进行挪动,让两个新的数据页根据主键值排序,第二个数据页的主键值都大于第一个数据页的主键值:

mssql重建索引_mssql重建索引_重建索引

此时根页就升级为索引页了,这根页里存放:

所以此时看起来根页就成为了索引页,引用了两个数据页。

mssql重建索引_重建索引_mssql重建索引

随着你不停插数据,然后数据页不停地页分裂,分裂出来更多的数据页。你唯一这个索引页,即根页里存放的数据页索引条目越来越多,连你的索引页都放不下了,那就让一个索引页分裂成两个索引页,然后根页继续往上走一个层级,引用两个索引页。

数据页越来越多,那根页指向的索引页也不停分裂,分裂出更多索引页,当你下层索引页数量太多时,会导致你的根页指向的索引页太多,根页继续分裂成多个索引页,根页再次上移一个层级。这就是你增删改时,整个聚簇索引维护的一个过程。

二级索引

同理,比如你name字段有一个索引,那么刚开始的时候你插入数据,一方面在聚簇索引的唯一的数据页里插入,一方面在name字段的索引B+树唯一的数据页里插入。

随着后续数据越来越多,name索引树里唯一的数据页也会分裂,整个分裂的过程跟上面一样,所以你插入数据的时候,本身就会自动维护你的各索引树。

你的name字段的索引B+树里的索引页中,其实除了存放页号和最小name字段值以外,每个索引页里还会存放那个最小name字段值对应的主键值。因为有时会出现多个索引页指向的下层页号的最小name字段值一样,就得根据主键判断。

比如插入一个新的name值,他需要根据name索引树的根页开始,逐层查找自己这个新的name值应该插入到叶节点的哪个数据页。

万一遇到同层里不同索引页指向不同的下层页号,但name值一样,就得根据主键值比较:新的name值插入到主键值较大的那个数据页里!

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!