MySql数据是如何存储在磁盘上存储的.docx
《MySql数据是如何存储在磁盘上存储的.docx》由会员分享,可在线阅读,更多相关《MySql数据是如何存储在磁盘上存储的.docx(11页珍藏版)》请在第一文库网上搜索。
1、MySql数据是如何存储在磁盘上存储的?敖丙 2021-06-04 08:54以下文章来源丁 Hollis ,作者zyzl992Hollis.Hollis, 一个对Coding有着独特追求的人。Java工程师成神之路系列作者、程序员的三门课联合作者,本公众号专注分享Java相关技术干货!关于MySql数据库,相信很多人都不陌生,这是当今最常用的一种关系型数据库,关于MySql的知识也是很丰富的。那么,不知道大家有没有想过这样的问题:MySql中的数据是存在哪的? 乂是如何存储的呢?本文就来深入分析一下这些问题。文章内容很长,建议收藏,建议大家静下心来仔细阅读,一定会有收获!Innodb的存储格
2、式我们知道,关于Mysql这种关系型数据库,里面保存的数据最终都是要持久化到磁盘文件上面的。磁盘文件里存放的物理格式就是数据页(关于数据页,如果不太理解先忽略,后续文章单独介绍),数据页中存放的是一行一行的记录,但是对于数据页中的每一行数据他又是怎么存储的呢?我们拿Mysql中最常用的Innodb引擎来重点说,介绍下存储格式是怎样的。MySQL中存储有3种:1. server层格式:与存储引擎无关,Binlog存储常用的一种(Bin Log我们前面已经详细介绍过了,这个是MySql主从复制的一个很重要的文件)2. 索引元组格式:InnoDB存取过程记录的中间状态,是InnoDB在内存中存储的格
3、式 (换句话说我们的增删改的操作都是在内存中执行的,这个只是一种临时状态)3. 物理存储格式:记录在物理页面中的存储格式,即compact格式,与索引元组格式一一对应。(这个是数据在磁盘存储的真正的格式)MySql的InnoDB存储引擎和大多数数据库一样,都是以行的形式存储数据的,我们可以通过SHOW TABLE STATUS查看到行的的存储格式。InnoDB储存引擎支持有四种行储存格式:COMPACT、Redundant、Dynamic和COMPRESSED。默认为COMPACT o 其他的参数我们这里不关注,仅仅看Row_format这列,这里我们可以看到行的存储格式是Compact, C
4、ompact存储数据的格式大致如下这样变长字段长度列表NULL标志位记录头信息事务ID回滚指针列1数据列对于我们看到的每一行数据,我们最先看到的好像并不是各个列,而是一些类似列的描述信息。没错,其实在存储的时候都会有一些都字段来描述这一行的信息,这就好比缓存池中的描述缓存页的描述数据类似。卜 .面的图片大家可以这么简化来对待,事务ID和回滚指针大家先不要关注,免得因为这个产生干扰而难于理解变长字段长度列表NULL标志位记录头信息列1数据列2数据变长字段varchar是如何存储的一般情况下,我们要存储的数据是并不能确定他的长度的,大部分情况下都是一些变长的数据,以varchar为例,假设现在三个
5、字段,字段类型分别为:varchar (10), char (1), char (1) , char大家都是知道的,存储的基本是一些已知的长度固定的数据,假设这三个类型的字段分别有如下的数据:第一行:mysql a a;第二行:dog b c;画个图来帮助大家想象,现在你看到的是数据中为我们展现的样子。varchar(10) char(1)char 第一行第二行但是在磁盘中可不是这样子的,前文已经提到过,表空间和行这些其实是逻辑上的概念,而数据页是一种物理概念,也就是说我们看到的样子在磁盘中的样子本本是不一样的。在磁盘中这两条记录大致是这样子的:mysql a a dog b c,他们在磁盘中
6、都是挨在一起存储的。是不是瞬间感觉想要去查找一条数据非常麻烦,告诉你:是的,所以MySql在设计的时候才会使用行格式存储,才会有前面的哪些变长字段列表和标志位以及记录信息、,这些就是用来记录一行的记录的信息,换句话说,MySql是通过这些描述信息来定位到一行中的具体记录的。以第一行记录为例,它在磁盘中的记录情况大致是下面这样子的,首先我们需要明确知道的是各个字段的类型MySql是很清楚的,在这个基础上我们能看明白下面和想通后面的事情。首先我们看到 mysql是5个字符,使用十六进制表示是0x05,所以他的存储大概是这样子的:0x05NULL标志,立I记录头信息mysqlaa同理第二行数据类似这
7、样子的:0x03NULL标志位记录头信息dogb相信大家在看到这里已经大概能推测出MySql这个时候是怎么读读取数据的了,就是他会先根据变长字段长度列表中描述的变长字段的信息去查找变长字段,例如第一行,MySql解析到变长字段是5,所以他会在mysql a a dogb c这些里面取出5个字符,也就是 mysql,紧接着后而是两个char(l)也就是两个 a在依次取出来。中间设备。由浅入深,我们慢慢来,刚刚上面说到的仅仅是一种非常简单的情况,这个首先是帮助大家理解,让大家先明白有这么个回事,是这么回事,然后在慢慢的挖掘,我们一定要一个萝卜一个坑的去踏实学习现在如果是多个varchar类型的字段
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySql 数据 如何 存储 磁盘