翼度科技»论坛 编程开发 mysql 查看内容

MySQL-InnoDB磁盘结构

10

主题

10

帖子

30

积分

新手上路

Rank: 1

积分
30
主要阐述InnoDB存储引擎(MySQL5以后的默认引擎)。
数据库中最基本的组成结构是数据表,视觉上的表和其对应的磁盘结构如下:

此图参考了厦门大学课堂: 。但是视频中一些更多细节没有涉及,比如Leaf node segment和Non-leaf node segment其实就是叶子节点和非叶子节点段,
照inode,page相关概念,一颗B+树当然只有这两种段,来管理各种page(树节点)。信息较少,且看且珍惜。
更多关于tablespace的信息移步:MySQL Tablespaces
**核心:MySQL以Page为单位进行数据管理(默认1个Page=16KB)。因为磁盘寻道原因,一次将读取1个Page到内存。即每次查询,一次IO至少是一个Page的数据被装载到内存。
 
将segment,extent,page的关系描绘如下:

 
Page的组成:

**page directory:提高records部分的查询速度(单链表-->排序-->二分查找)。定位到page后,records记录太长,设计了page directory的slot插槽,每个slot包含一段records记录,提高查找效率。
为什么一个Page是16KB?太大,page directory定位时间太长;太小,磁盘寻道时间变长,IO次数变多。这是一个折中值。(固态硬盘没有磁盘寻道,可以考虑将Page size的值改为小于16KB的更小的值,仍需要测试验证数据支撑)。
 
索引页:
MySQL中:每个索引都对应了一颗B+树。
聚集(聚集不一定是主键,但主键一定是聚集)索引对应了一颗B+树,叶子节点存储了数据;
非聚集(辅助)索引对应了一颗B+树,叶子节点只存储了主键,所以需要额外一次去聚集索引B+树查找所需数据(即回表)。
 
主键索引和辅助索引检索示意:

 
 
本文中部分图的来源在这里
 

来源:https://www.cnblogs.com/hangwei/p/16981472.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具