首页 > 数据库 >MySQL-InnoDB磁盘结构

MySQL-InnoDB磁盘结构

时间:2022-12-20 12:22:51浏览次数:64  
标签:page 索引 InnoDB MySQL 磁盘 主键 Page

主要阐述InnoDB存储引擎(MySQL5以后的默认引擎)。

数据库中最基本的组成结构是数据表,视觉上的表和其对应的磁盘结构如下:

此图参考了厦门大学课堂:MySQL原理 。但是视频中一些更多细节没有涉及,比如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+树查找所需数据(即回表)。

 

主键索引和辅助索引检索示意:

 

 

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

 

标签:page,索引,InnoDB,MySQL,磁盘,主键,Page
From: https://www.cnblogs.com/hangwei/p/16981472.html

相关文章

  • 故障分析 | MySQL死锁案例分析
    一 背景死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见过。本次分享的死锁案例更新不存在的记录加上XGAPlock和inser......
  • MySQL锁等待超时一例分析
    1、问题现象开发反馈某业务持续性报锁等待超时,相关错误信息如下:Lock wait timeout exceeded; try restarting transaction为了能精确定位问题,继续询问开发有没有......
  • 基于jsp+servlet+mysql简单的实现了商品的增删改查
    @目录一、系统介绍二、功能展示1.商品主页2.商品添加3.商品修改4.商品查询5.商品删除三、数据库四、其它系统一、系统介绍系统主要功能:简单的实现了商品的增删改查环境......
  • 实例说明optimize table在优化mysql时很重要
    实例说明optimizetable在优化mysql时很重要张映发表于2011-03-07分类目录:mysql标签:mysql,optimizetable,优化今天在看CU的时候,发现有人问有关optimize来......
  • [MySQL]SELECT list is not in GROUP BY clause and contains nonaggregated column..
    项目在windows上运行正常,迁移到Linux系统上就出现了这个错,经查是由于本人sql不规范且恰好mysql的sql_mode启用了only_full_group_by,当sql语句中使用了分组查询,并且查询的字......
  • MySQL使用--存储过程篇
    查看存储过程:select`name`frommysql.procwheredb='your_db_name'and`type`='PROCEDURE'SHOWprocedurestatus;查看存储过程的创建代......
  • MySQL使用--通用操作篇
    服务启动:netstartmysql(windows启动)"/etc/rc.d/init.d/mysqldstart"(linux启动)用户登录:mysql[mydb]-h127.0.0.1-uroot-ppassword;常用统计......
  • MySQL使用--表操作篇
    查看表描述:DESCRIBEMYTABLE;创建表:CREATETABLE[IFNOTEXISTS]表名称(列名称1数据类型[属性][索引],列名称2数据类型[属性][索引],列名称......
  • MySQL使用--内建函数篇
    一.字符串类:CHARSET(str)//返回字串字符集CONCAT(string2[,...])//连接字串INSTR(string,substring)//返回substring首次在string中出现的......
  • mysql: "tablename" is marked as crashed and should be repaired修复 问题分析: 当m
    问题分析:当mysql出现这类提示时,大部分的现象为查询不到正常的表记录,或者只能查询到部分。主要的原因是对应表的索引文件被损坏,导致索引文件损坏的可能原因有:频繁的读写表......