InnoDB磁盘区域

1、共享表空间【系统表空间】

共享表空间【InnoDB默认使用共享表空间,独立表空间这里不做讲解】

InnoDB的共享表空间是指多个表共享同一个数据文件,所有的表数据存储在同一个数据文件中

InnoDB的共享表空间优点

可以节省磁盘空间,因为多个表的数据和索引都存储在同一个文件中

数据和文件放在一起方便管理

InnoDB的共享表空间缺点

所有的数据和索引存放到一个文件中,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙

共享表空间由各个段组成,常见的段【数据段,索引段,回滚段】,段由各个区组成,区由连续的页组成,一个区由64个连续的页组成

InnoDB系统表空间【共享表空间】包含:

InnoDB数据字典【B+树】双写缓冲区【doublewrite buffer】(ChangeBuffer和UndoLogs)如果没有指定file-per-table【独立表空间】,也包含用户创建的表和索引数据

注释:独立表空间只存放数据,索引和插入缓冲Bitmap页;其他类的数据,undo信息,插入缓冲索引页,系统事务信息,二次写缓冲依然存放在共享表空间

1.1、数据字典

1.1.1、B+树

B+树索引

1、平衡查找树,叶子节点存放数据,非叶子节点存放索引键值数据

2、高扇出性:树的高度一般在2-4层【在查找某一键值的行记录时最多只需要2-4次IO操作】

3、B+树索引并不能找到一个给定键值的具体行,B+树索引能找到的只是被查找数据所在的页

4、B+树索引分为聚集索引【主键】和辅助索引,InnoDB在物理层面的索引只有两种:聚集索引【聚簇索引】和非聚集索引【非聚簇索引】

5、B+树的中间节点可以找到要查找的所有数据页

1.1.2、数据页

数据页是MySQL抽象出来的数据单位,是InnoDB管理的最小单位

磁盘文件中存放了很多数据页,每个数据页里存放了很多行数据。

缓冲池和磁盘之间的数据交换的单位是数据页,包括从磁盘中读取数据到缓冲池和缓冲池中数据刷回磁盘中【磁盘中存放的数据页的大小是16KB

1.1.3、聚集索引

1、每张表只存在一个聚集索引,聚集索引的叶子节点存放着对应的数据页

2、聚集索引的存储并不是物理连续的,而是逻辑上连续的,数据页通过双向链表链接;同时每个数据页的记录也是通过双向链表进行维护的,同样是逻辑上有序;

3、聚集索引表记录的排列顺序与索引的排列顺序一致,所以聚集索引Crud速度快

4、查询优化器倾向于采用聚集索引;聚集索引在排序查找和范围查找时,查询优化器能够快速发现某一段范围的数据页需要扫描

5、在叶子节点获取数据是顺序读【顺序读在IO层面通常更加高效,因为它可以利用操作系统的块设备层对连续块的高效处理机制

1.1.4、非聚集索引【辅助索引】

1、每张表可以有多个非聚集索引,非聚集索引的键值顺序与数据的物理存储顺序无关,叶子节点并不包含行记录的所有数据,而是对应数据页的聚集索引键和数据页的指针

2、辅助索引的存在并不影响数据在聚集索引中的组织

3、当数据被插入或更新时,非聚集索引需要先修改索引结构,再更新数据页。因此,非聚集索引的插入和更新操作可能比聚集索引更耗时

非聚集索引获取数据有两种方式

离散读主要取决于数据页在磁盘上的物理布局以及查询访问的数据页是否连续

1、如果聚集索引中的数据页是连续存储的,并且查询访问的数据页也是连续的,那么就可以通过顺序读来高效地获取数据;通过辅助索引查找数据时,InnoDB存储引擎会遍历辅助索引并通过叶子节点获取聚集索引的主键值,然后通过聚集索引找到对应的数据页

2、如果查询访问的数据页在磁盘上是不连续的,或者数据页没有被缓存在InnoDB的缓冲池中,那么就会发生离散读。离散读会增加IO操作的复杂性和成本,因为数据库需要频繁地在不同的数据页之间进行跳转

3、当查询匹配到非聚集索引的一个或多个指针时,数据库需要根据这些指针去查找实际的数据页。这些指针可能指向磁盘上相隔较远的位置,从而导致数据库需要进行多个离散的IO操作来读取数据页

4、查询范围较大:当执行范围查询(如WHERE column_name BETWEEN value1 AND value2)时,非聚集索引可能需要访问多个条目,每个条目都指向一个不同的数据页。这种情况下,数据库需要读取多个离散的数据页来满足查询条件

1.1.5、联合索引

如图在一张表中建立联合索引A,B,C

排序规则:如图首先按照字段A在B+树中进行排序,当字段A相同时,按照字段B进行排序;当字段B相同时,按照字段C进行排序;

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java之项目解析+八股文 文章被收录于专栏

针对Java简历中项目的功能进行提问,大家可以在评论区中解答/讨论;同时提供八股文

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-08 00:50
点赞 评论 收藏
转发
点赞 1 评论
分享
牛客网
牛客企业服务