更新数据时,MySQL的聚簇索引是如何变化的?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 文章已收录在我的 GitHub 仓库,欢迎Star/fork:Java-Interview-Tutorial听说点赞、评论、收藏的人长得都很好看哦。

文章已收录在我的 GitHub 仓库,欢迎Star/fork:

Java-Interview-Tutorial

听说点赞、评论、收藏的人长得都很好看哦。

8.png


搜索一个主键id对应的行,先去顶层的索引页88里通过二分查找,定位到你应该去下层哪个索引页里继续找。


若现在定位到下层的索引页35,此时在索引页35里也有一些索引条目,分别都是下层各索引页(20、28、59)及他们里面最小的主键值,此时在索引页35的索引条目里继续二分查找,容易定位到,应该再到下层的索引页里找。


可能从索引页35接着就找到下层的索引页59,此时索引页59里也有索引条目,存放部分数据页页号(如数据页2、8)和每个数据页里最小的主键值。在此继续二分查找,就能定位到应该到哪个数据页里去找。


比如进入数据页2,里面就有个页目录,存放各行数据的主键值和行的实际物理位置。在此继续二分查找,即可快速定位到待搜索主键值对应行的物理位置,然后直接在数据页2里找到那条数据。这就是基于索引去查找主键的过程。


最下层的索引页,都有指针引用数据页,所以索引页之间跟数据页之间有指针连接。索引页内部,同一层级的索引页互相之间也是基于指针组成双向链表:

7.png



假设你把索引页和数据页综合起来看,他们都是连接在一起的,从根索引页88开始,一直到所有的数据页,组成了B+树。最底层的一层就是数据页,数据页也就是B+树里的叶节点。


所以,如果B+树索引数据结构里,叶节点就是数据页自己本身,即为聚簇索引!即上图中所有的索引页+数据页组成的B+树就是聚簇索引!


InnoDB下,对数据增删改时,就是直接把你的数据页放在聚簇索引,数据就在聚簇索引里,聚簇索引就包含了数据。比如你插入数据,那就是在数据页里插入数据。


若你的数据页开始进行页分裂,他此时会调整各数据页内部的行数据,保证数据页内的主键值都有序,:


下一个数据页的所有主键值>上一个数据页的所有主键值


页分裂时,也会维护你的上层索引数据结构,在上层索引页里维护你的索引条目,不同的数据页和最小主键值。


然后若你的数据页越来越多,一个索引页放不下了,就会再拉出新的索引页,同时再搞一个上层的索引页,上层索引页里存放的索引条目就是下层索引页页号和最下主键值。


同理可得,若你的数据量越大,此时可能就多出更多索引页层级,不过一般索引页里可以放很多索引条目,即使你是亿级大表,基本上大表里建的索引的层级也就三四层。


聚簇索引默认按主键组织的,所以你在增删改数据时:


会更新数据页

会给你自动维护B+树结构的聚簇索引,给新增和更新索引页,这个聚簇索引是默认就会给你建立

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
SQL 存储 关系型数据库
MySQL索引及事务
MySQL索引及事务
16 2
|
1天前
|
关系型数据库 MySQL 分布式数据库
如何将数据从MySQL迁移到PolarDB?
【5月更文挑战第13天】如何将数据从MySQL迁移到PolarDB?
10 0
|
5天前
|
存储 关系型数据库 MySQL
MySQL是怎样存储数据的?
MySQL是怎样存储数据的?
|
5天前
|
存储 SQL 关系型数据库
完蛋!😱 我被MySQL索引失效包围了!
完蛋!😱 我被MySQL索引失效包围了!
|
5天前
|
SQL 存储 关系型数据库
MySQL的3种索引合并优化⭐️or到底能不能用索引?
MySQL的3种索引合并优化⭐️or到底能不能用索引?
|
5天前
|
存储 SQL 关系型数据库
MySQL索引,看这一篇就够了!
MySQL索引,看这一篇就够了!
|
5天前
|
Java 关系型数据库 MySQL
MySQL 索引事务
MySQL 索引事务
13 0
|
6天前
|
存储 SQL 关系型数据库
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
23 0
|
6天前
|
自然语言处理 关系型数据库 MySQL
一文明白MySQL索引的用法及好处
一文明白MySQL索引的用法及好处
17 0
|
6天前
|
SQL 关系型数据库 MySQL
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!